无法解析到NHibernate映射对象的平均linq属性



我有代码,计算从日期打开到日期关闭的平均天数。当我使用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);

如果上面的代码有问题,请插入我们的类定义。但这肯定不是最好的解决方案,最好是编写一个存储过程并调用它。

最新更新