linqtoNHibernateクエリの上位5要素のプロパティの合計を受け取りたい。以下のコードを使用する場合:
Session.Query<Document>().Take(5).Sum(x => x.Value)
'メソッドがサポートされていません'例外が発生します。
何か案は?
NHibernate 3.3.1.4000
linqtoNHibernateクエリの上位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
問題は、nhibernatelinq プロバイダーがまだ完全に実装されていないことです。を使用してメモリをマテリアライズしてから、linq-to-memoryを使用して.ToArray()
計算してみてください。.Sum()
例えば:
Session.Query<Document>().Select(x => x.Value).Take(5).ToArray().Sum()
ps:同じ種類の問題が発生する可能性が.Skip()
ありますDefaultIfEmpty()
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;