我希望在linq到NHibernate查询的前5个元素中接收属性的总和。如果我使用下面的代码:
Session.Query<Document>().Take(5).Sum(x => x.Value)
我得到'方法不受支持'例外。
有什么想法吗?
NHibernate 3.3.1.4000
答案 0 :(得分:2)
您可以使用:
Session.Query<Document>().Select(x => x.Value).Take(5).Sum();
NHibernate仅支持Sum
重载而没有表达式参数。
由于未知原因,您必须先正确评论Select
而不是Take
。
答案 1 :(得分:0)
问题是nhibernate linq提供商尚未完全实施。尝试使用.ToArray()
实现内存,然后使用linq-to-memory计算.Sum()
。
例如:
Session.Query<Document>().Select(x => x.Value).Take(5).ToArray().Sum()
ps:.Skip()
可能发生同样的问题,并与DefaultIfEmpty()
答案 2 :(得分:0)
在NHibernate.4.0.2.4000
中,带有lambda的Sum也可以Session.Query<Document>().Take(5).Sum(x => x.Value)
。
如果没有返回任何行并且Value不是可空类型,则需要将其强制转换为可空类型,因为当没有项目时,sum将返回null:
Session.Query<Document>().Take(5).Sum(x => (decimal?)x.Value) ?? 0;