2017-01-30 14 views
-3

少し変更したクエリがあり、それを汎用Iqueryableにしました。 しかし今どこどこ 『ステートメントIQueryableに 'Where'の定義が含まれていませんLinq、C#

がどのように私はこれを修正すればよいので、私のIQueryableを持つことができる』「のIQueryableのための定義が含まれていません』というエラーを投げている、より具体的には、それに頼っていたすべてのコード

IQueryable query = _db 
       .BatchPayments 
       .Where(
        bp => ValidBatchStatuesIds.Contains(bp.Batch.BatchStatusId) 
         && (!OnlineBatchTypes.Contains(bp.Batch.BatchTypeId) 
          || (OnlineBatchTypes.Contains(bp.Batch.BatchTypeId))) 
       ) 
       .GroupBy(i => i.BatchId) 
       .Select(i => new 
       { 
        Amount = i.Sum(j => j.Amount) 
       }); 

if (model.AmountFrom.HasValue && model.AmountFrom.Value > 0) 
      { 
       query = query.Where(bp => bp.Amount >= model.AmountFrom); // This is the line it bugs out on that I need to work 
       hasInput = true; 
      } 
+2

これはIQuerableにする必要があります

+0

スコットを指しています...しかし、匿名型を返すので、あなたは 'var'を使う必要があります。 –

+0

@DStanleyそれがそうだった場合、スニペットの前の 'Where'はコンパイルされず、' GroupBy'または 'Select'もコンパイルされません。 – Servy

答えて

2

Whereは、IQueryable<T>での拡張方法であり、IQueryableではありません。クエリをさらにフィルタリングするにはタイプをIQueryable<T>にする必要があります。これを行うには、を使用するか、金額の匿名オブジェクトではなく、実際の金額を投影してqueryIQueryable<decimal>(またはAmountの数値タイプ)にすることができます。

関連する問題