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