NHibernate Linq中前5个元素的总和

时间:2013-01-22 11:59:06

标签: sql linq nhibernate linq-to-nhibernate

我希望在linq到NHibernate查询的前5个元素中接收属性的总和。如果我使用下面的代码:

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

我得到'方法不受支持'例外。

有什么想法吗?

NHibernate 3.3.1.4000

3 个答案:

答案 0 :(得分:2)

您可以使用:

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

NHibernate仅支持Sum重载而没有表达式参数。

由于未知原因,您必须先正确评论Select而不是Take

答案 1 :(得分:0)

问题是 提供商尚未完全实施。尝试使用.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;