我想接收 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.4000Sum with lambda 中也可以Session.Query<Document>().Take(5).Sum(x => x.Value)。
如果有可能不返回任何行并且 Value 不是可空类型,则需要将其转换为可空类型,因为当不存在任何项目时,总和将返回 null:
Session.Query<Document>().Take(5).Sum(x => (decimal?)x.Value) ?? 0;