2

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

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

我得到“方法不支持”异常。

有任何想法吗?

NHibernate 3.3.1.4000

4

3 回答 3

2

你可以使用这个:

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

NHibernate 只支持Sum没有表达式参数的重载。

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

于 2013-01-22T12:03:18.267 回答
0

问题是 提供程序还没有完全实现。尝试使用.ToArray()to memory 实现,然后.Sum()使用 linq-to-memory 计算。

例如:

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

ps:同样的问题可能会发生.Skip()并加入DefaultIfEmpty()

于 2013-01-22T12:24:49.223 回答
0

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;
于 2015-06-12T15:59:39.233 回答