我有代码,计算从日期打开到日期关闭的平均天数。当我使用Linq和lambda表达式运行表达式时,我得到如下错误:
错误消息:无法解析属性:datecclosed。DateCreated:TestProject。LegalWork
其中代码为:
var result = Repository.All
.Where(x => x.DateClosed != null)
.Average(x => ((DateTime)x.DateClosed - x.DateCreated).TotalDays);
无论如何,当我运行这个使用循环和过滤器的条件,一切都很好。
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版本有什么问题?
我确定你不能调用to:
x.DateClosed - x.DateCreated
或givenDate.TotalDays
在linq2nhibernate中,因为你应该调用DateTime的特定函数它不是linq2nhibernate的一部分它是。net框架的一部分,它没有在linq2nhibernate中实现,但你当前的错误信息说另一件事,解决你的问题目前你可以做:
var result = Repository.All.Where(x => x.DateClosed != null).ToList()
.Average(x => ((DateTime)x.DateClosed - x.DateCreated).TotalDays);
如果上面的代码有问题,请插入我们的类定义。但这肯定不是最好的解决方案,最好是编写一个存储过程并调用它。