2009-04-17 55 views
2

我想將NHibernate CreateCriteria轉換爲NHLambdaExtensions條件,但是我收到了一些我不知道如何解決的錯誤。NHibernate Lambda擴展 - 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>(); 

我得到的錯誤是「無法解析財產部:商業部「。這個錯誤顯然與「g => g.Department」有關,並且原始NHibernate查詢中沒有任何東西類似,但沒有重載不包含該表達式。

+0

對不起,十億retags:

實際上,你可以更有效地爲寫這篇文章。我試圖爲未被截斷的lambda表達式獲得正確的標籤。 – ddc0660 2009-09-14 18:01:34

回答

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>(); 

查找 「創建標準協會別名」:

// 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分配一個別名。在NHibernate Lambda Extensions (V1.0.0.0) - Documentation

編輯

+0

這也沒有效果。 – 2009-04-22 20:22:36