Sql NHibernate Linq中前5个元素的总和

Sql NHibernate Linq中前5个元素的总和,sql,linq,nhibernate,linq-to-nhibernate,Sql,Linq,Nhibernate,Linq To Nhibernate,我想接收linq to NHibernate查询中前5个元素的属性总和。如果我使用以下代码: Session.Query<Document>().Take(5).Sum(x => x.Value) Session.Query().Take(5.Sum)(x=>x.Value) 我得到“不支持方法”异常 有什么想法吗 NHibernate 3.3.1.4000您可以使用: Session.Query<Document>().Select(x => x.Val

我想接收linq to NHibernate查询中前5个元素的属性总和。如果我使用以下代码:

Session.Query<Document>().Take(5).Sum(x => x.Value)
Session.Query().Take(5.Sum)(x=>x.Value)
我得到“不支持方法”异常

有什么想法吗

NHibernate 3.3.1.4000

您可以使用:

Session.Query<Document>().Select(x => x.Value).Take(5).Sum();
Session.Query().Select(x=>x.Value).Take(5.Sum();
NHibernate仅支持不带表达式参数的
Sum
重载

由于未知的原因,您必须首先选择,然后按照正确的注释选择。

问题在于该提供程序尚未完全实现。尝试使用
.ToArray()
对内存进行具体化,然后使用linq对内存计算
.Sum()

例如:

Session.Query<Document>().Select(x => x.Value).Take(5).ToArray().Sum()
Session.Query().Select(x=>x.Value).Take(5.ToArray().Sum()

ps:NHibernate.4.0.2.4000中的
.Skip()
DefaultIfEmpty()

也会出现同样的问题,lambda的和也会起作用
Session.Query().Take(5).Sum(x=>x.Value)

如果可以不返回任何行,并且Value不是可为null的类型,则需要将其转换为可为null的类型,因为当不存在任何项时,sum将返回null:

Session.Query<Document>().Take(5).Sum(x => (decimal?)x.Value) ?? 0;
Session.Query().Take(5).Sum(x=>(十进制?)x.Value)??0;

谢谢,但这也给出了一个例外。您的总和重载是正确的。在你的回答中,你必须改变Take和Select方法的顺序。@ChrisJ:的确如此。这很奇怪,应该没有什么区别。将数据传输到服务器,然后求和效率会降低。如Daniel Hilgarth的回答中所述,可以用DB进行求和。