我想接收 linq to NHibernate 查询中前 5 个元素的属性总和。如果我使用下面的代码:
Session.Query<Document>().Take(5).Sum(x => x.Value)
我得到“方法不支持”异常。
有任何想法吗?
NHibernate 3.3.1.4000
我想接收 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()
to memory 实现,然后.Sum()
使用 linq-to-memory 计算。
例如:
Session.Query<Document>().Select(x => x.Value).Take(5).ToArray().Sum()
ps:同样的问题可能会发生.Skip()
并加入DefaultIfEmpty()
在NHibernate.4.0.2.4000
Sum with lambda 中也可以Session.Query<Document>().Take(5).Sum(x => x.Value)
。
如果有可能不返回任何行并且 Value 不是可空类型,则需要将其转换为可空类型,因为当不存在任何项目时,总和将返回 null:
Session.Query<Document>().Take(5).Sum(x => (decimal?)x.Value) ?? 0;