質問

私は NHLambdaExtensions を基準に上のNHibernateのcreateCriteriaを変換したいが、私はよ私は修正する方法がわからないエラーを取得します。

NHibernateの基準は次のようになります:

var departments = DepartmentService
    .CreateCriteria()
    .CreateAlias( "Goals", "goal" )
    .Add( Expression.Eq( "goal.Company.Id", companyId ) )
    .Add( Expression.Eq( "goal.Program.Id", programId ) )
    .List<Business.Department>();

私はこのようなルックスを作成しようとしていますNHLambdaExtensions条件ます:

Business.Goal goalAlias = null;
var departments = DepartmentService
    .CreateCriteria()
    .CreateAlias<Business.Goal>( g => g.Department, () => goalAlias )
    .Add<Business.Goal>( g => g.Company.Id == companyId )
    .Add<Business.Goal>( g => g.Program.Id == programId )
    .List<Business.Department>();

私は取得していますエラーが「:Business.Departmentの財産部門を解決できませんでした」です。エラーは明らかに「G => g.Department」と関係があり、そして何も似た何かを持っている本来のNHibernateのクエリではありませんが、式を取ることはありません何のオーバーロードはありません。

役に立ちましたか?

解決

Business.Goal goalAlias = null;
var departments = DepartmentService
    .CreateCriteria(typeof(Business.Department)) // need to specify the first criteria as Business.Department
        .CreateCriteria<Business.Department>(d => d.Goals, () => goalAlias)
            .Add<Business.Goal>( g => g.Company.Id == companyId )
            .Add<Business.Goal>( g => g.Program.Id == programId )
    .List<Business.Department>();

NHibernateはラムダ拡張機能(V1.0.0.0で「別名で基準を作成協会」を探してください) - ドキュメント

EDITます:

あなたが実際にように、より効率的にこれを書くことができます

// no alias necessary
var departments = DepartmentService
    .CreateCriteria<Business.Department>()
        .CreateCriteria<Business.Department>(d => d.Goals)
            .Add<Business.Goal>( g => g.Company.Id == companyId )
            .Add<Business.Goal>( g => g.Program.Id == programId )
    .List<Business.Department>();

他のヒント

私は(それはかなりクールに見えると私は間違いなくすぐにそれをチェックアウトします)NHLambdaExpressionsを使用していないので、私はちょうどここに推測しています。あなたはこのような何かを行うことができます:

Business.Goal goalAlias = null;
var departments = DepartmentService
    .CreateCriteria()
        .CreateCriteria((Business.Department g) => g.Goals, () => goalAlias)
            .Add<Business.Goal>( g => g.Company.Id == companyId )
            .Add<Business.Goal>( g => g.Program.Id == programId )
            .List<Business.Department>();

私はこれが目標で新しい基準を根絶し、goalAliasを経由して別名を割り当てるだろうと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top