【问题标题】:Using a for loop, how do I populate a lambda where condition?使用 for 循环,如何填充 lambda where 条件?
【发布时间】:2014-05-22 13:11:14
【问题描述】:

我有一个动态数据列表。我想遍历列表以创建 where 子句。我怎么做?

IQueryable<MyObject> result = originalData;
foreach (var item in Years)
{
    result = input.Where(x => x.Year == item).AsQueryable();
}

2013 应该有 30,2014 应该有 18。我的结果应该是 48 时只给出 18。有什么想法吗?

编辑

我应该提到我知道我正在覆盖结果。我尝试了 += 并且我得到了 '+=' 不能应用于 IQueryable(MyObject> 和 IQueryable(MyObject>

的操作数) 的错误

【问题讨论】:

  • 结果+=表达有效吗?或者你对结果做了什么?
  • 您将第一个循环的结果替换为第二个循环的结果。
  • result += input.Where(x => x.Year == item).AsQueryable();
  • 您正在关闭一个循环变量。到执行 lambda 时,loop var 将采用它的最终值。为了避免这种情况,请将 llop 变量复制到本地,例如在循环体 var year = item 中的 fitt 行上
  • @HAbib。包含正是我需要的。谢谢!

标签: c# asp.net .net linq lambda


【解决方案1】:

您不需要for 循环,您可以这样做:

IQueryable<MyObject> result = input.Where(x=> Years.Contains(x.Year));

目前您的result 正在保存循环的最后一个值。因此,假设您在Years 中的最后一个值是 2014,然后您将返回 18 行,之前的行在迭代中被覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多