2

linqtoNHibernateクエリの上位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

問題は、 プロバイダーがまだ完全に実装されていないことですを使用してメモリをマテリアライズしてから、linq-to-memoryを使用して.ToArray()計算してみてください。.Sum()

例えば:

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.4000ラムダとの合計でも機能しますSession.Query<Document>().Take(5).Sum(x => x.Value)

行が返されない可能性があり、Valueがnull許容型ではない場合は、アイテムが存在しない場合に合計がnullを返すため、null許容型にキャストする必要があります。

Session.Query<Document>().Take(5).Sum(x => (decimal?)x.Value) ?? 0;
于 2015-06-12T15:59:39.233 に答える