【问题标题】:IQueryable does not contain definition for 'Where' Linq, C# [duplicate]IQueryable 不包含“Where”Linq、C# 的定义 [重复]
【发布时间】:2017-01-31 01:59:27
【问题描述】:

我有一个查询,我做了一些修改,将它变成了一个通用的 Iqueryable。 然而,现在所有依赖它来更具体的代码都抛出一个错误,说'IQueryable 不包含'Where'的定义

如何解决这个问题,以便我的 Iqueryable 可以有一个 'where' 语句

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;
            }

【问题讨论】:

  • 它必须是 IQuerable
  • 指向 Scott... 但由于它返回匿名类型,您必须使用 var
  • @DStanley 如果是这样(事实并非如此),那么 sn-p 中前面的 Where 将无法编译,GroupBySelect 也不会编译。

标签: c# linq model-view-controller


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多