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

时间:2011-07-28 08:02:37

标签: linq linq-to-objects linq-to-nhibernate

我有代码计算从开放日期到结束日期的平均天数。 当我使用Linq和lambda表达式运行表达式时,我得到如下错误:

  

错误消息:无法解析属性: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 个答案:

答案 0 :(得分:1)

我确定你不能打电话给:

x.DateClosed - x.DateCreated
linq2nhibernate中的

givenDate.TotalDays,因为你应该调用DateTime的一个特定函数,它不是linq2nhibernate的一部分,它是.net框架的一部分而且它没有在linq2nhibernate中实现,但你当前的错误信息说的是另一件事,解决你现在可以做的问题:

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

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