2011-07-28 83 views
1

我有代碼可以計算從開啓日期到結束日期之間的平均天數。 當我運行使用LINQ和lambda表達式,我得到的錯誤如下表達:無法解析平均LINQ到NHibernate映射對象的屬性

錯誤消息:無法解析屬性:DateClosed.DateCreated的: TestProject.LegalWork

其中的代碼是:

var result = Repository.All 
      .Where(x => x.DateClosed != null) 
      .Average(x => ((DateTime)x.DateClosed - x.DateCreated).TotalDays); 

如何永遠當我運行這個使用循環和過濾條件只,eveything工作正常。

int number= 0; 
decimal totalDays = 0; 
foreach (LegalWork legalWork in Repository.All.Where(x => x.DateClosed != null)) 
{ 
    totalDays += (decimal)((DateTime)legalWork.DateClosed - legalWork.DateCreated).TotalDays; 
    number++; 
} 
return (totalDays == 0 || numberOfLegalWork ==0) ? 0 : Convert.ToDecimal(totalDays/numberOfLegalWork); 

Linq和Lambda版本有什麼問題?

回答

1

我敢肯定,你不能打電話:

x.DateClosed - x.DateCreated 

或linq2nhibernate givenDate.TotalDays,因爲你應該叫日期時間的特定函數,而不是linq2nhibernate的一部分,它是.NET Framework的一部分,它不linq2nhibernate實現,但當前的錯誤消息稱另一件事,目前解決問題的烏爾u能做到:

var result = Repository.All.Where(x => x.DateClosed != null).ToList() 
    .Average(x => ((DateTime)x.DateClosed - x.DateCreated).TotalDays); 

如果與上面的代碼問題,請插入烏爾類的定義, 但它肯定「這不是一個最好的解決方案,最好編寫一個存儲過程並調用它。

+0

在結果運行平均值之前,我寧願不將結果轉換爲列表,如果可能的話。 – cpoDesign

相關問題