NHibernateはラムダ拡張機能 - のcreateCriteria問題
-
11-09-2019 - |
質問
私は 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を経由して別名を割り当てるだろうと思います。
所属していません StackOverflow