2009-04-17 11 views
2

NHibernate CreateCriteriaをNHLambdaExtensionsの基準に変換したいが、修正方法がわからないというエラーが出ている。NHibernate Lambda Extensions - CreateCriteria Issue

ザ・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クエリには何も似ていませんが、式をとらないオーバーロードはありません。

+0

あなたが実際としてより効率的にこれを書くことができます。私は切り捨てられなかったラムダ式の正しいタグを取得しようとしていました。 – ddc0660

答えて

3
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 Lambda Extensions (V1.0.0.0) - Documentation

EDITで "別名で基準協会の作成" を探します。

億retagsのため申し訳ありません
// 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>(); 
0

私は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でエイリアスを割り当てると思います。

+0

それもうまくいきませんでした。 –