C# 使用for循环,如何填充lambda where条件?

C# 使用for循环,如何填充lambda where条件?,c#,asp.net,.net,linq,lambda,C#,Asp.net,.net,Linq,Lambda,我有一个动态数据列表。我想在列表中循环创建where子句。我该怎么做 IQueryable<MyObject> result = originalData; foreach (var item in Years) { result = input.Where(x => x.Year == item).AsQueryable(); } IQueryable结果=原始数据; foreach(以年为单位的var项目) { 结果=输入。其中(x=>x.Year==项)。AsQ

我有一个动态数据列表。我想在列表中循环创建where子句。我该怎么做

IQueryable<MyObject> result = originalData;
foreach (var item in Years)
{
    result = input.Where(x => x.Year == item).AsQueryable();
}
IQueryable结果=原始数据;
foreach(以年为单位的var项目)
{
结果=输入。其中(x=>x.Year==项)。AsQueryable();
}
2013年应该有30个,2014年应该有18个。我的结果应该是48,却只得到18。有什么想法吗

编辑


我应该提到我知道我正在覆盖结果。我尝试了+=但得到的错误是,“+=”不能应用于IQueryable(MyObject>和IQueryable(MyObject>循环)的操作数,您不需要
,可以执行以下操作:

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

当前,您的
结果
保留了循环的最后一个值。因此,假设
中的最后一个值是2014年,那么您将返回18行,之前的行将在迭代中被覆盖。

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