2017-01-30 58 views
-3

我有一个查询,我修改了一下,使它成为一个通用的Iqueryable。 但是现在所有依赖于它是更具体的是抛出一个错误说“的IQueryable不包含定义为‘去哪儿’IQueryable不包含定义'Where'Linq,C#

我该如何解决这个问题,所以我的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

WhereIQueryable<T>的扩展方法,而不是IQueryable。您需要将queryIQueryable<T>类型进一步过滤查询。您可以使用var或投影出实际金额,而不是使用金额为匿名的对象,从而允许queryIQueryable<decimal>(或任何数字类型Amount)。