8

私はIQueryableNHibernate を使用しており、特定の列を合計する linq クエリが必要ですが、Whereメソッドの条件で空の結果が得られた場合、例外を取得したくありませんが、クエリを実行したくありませんすべてのレコードを取得し、メモリ上で合計した後coalese、サンプルとして sql コマンドのようなものが必要です。

// I get exception when its empty
var query = MyQueryable()
              .Where(x => x.IsDone)
              .Select(x => x.Value)
              .Sum(); 

私はこのようなことをしなければなりません:

// I get 0, its ok, but ToList(), list all records on memory, 
// I just want to get a single value

var query = MyQueryable()
               .Where(x => x.IsDone)
               .Select(x => x.Value)
               .ToList()
               .Sum(); 

何か方法はありますか?

ありがとうございました。

4

1 に答える 1

12

Valuenull 許容型にキャストする必要があります。

たとえば、Valueintプロパティであると仮定します。

var result = MyQueryable()
                 .Where(x => x.IsDone)
                 .Select(x => (int?)x.Value)
                 .Sum()
             ?? 0;

nullable enumerable のaSum()は空のソースに対して null を返すため、合体演算子 ( ??) はそれが発生したときに 0 を返すように処理します。

于 2013-04-26T21:57:15.933 に答える