根据其他列表中的真实条件从通用列表中选择项目

bal*_*lan 3 c# linq lambda

我想知道下面的问题是否会有任何LINQ/Lambda表达式解决方案.

我有2个通用列表

清单1

public class Data
{
  public string ID { get; set;}
  public string Package { get; set;}
}

List<Data> listData = new List<Data>();

Data data1 =  new Data { ID = "1", Package = "Test" };
Data data2 =  new Data { ID = "2", Package = "Test2" };
Data data3 =  new Data { ID = "3", Package = "Test2" };
Data data4 =  new Data { ID = "4", Package = "Test4" };

listData.Add(data1);
listData.Add(data2);
listData.Add(data3);
listData.Add(data4);
Run Code Online (Sandbox Code Playgroud)

清单2

List<int> listFilter =  List<int>();

listFilter.Add(1);
listFilter.Add(0);
listFilter.Add(0);
listFilter.Add(1);
Run Code Online (Sandbox Code Playgroud)

我想根据"listFilter"中的true(1)条件过滤"listData".对于上面的示例,我必须能够将data1和data4拉入新列表.

目前,我正在使用for循环来实现此目的,如下所示.

List<Data> listResult =  new List<Data>();
for(int index=0; index<listData.Count; index++)
{
    if(listFilter[index]==1)
    {
       listResult.Add(listData[index]);
    }

}
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我使用LINQ或Lambda表达式来实现这一目标,我将不胜感激.

谢谢

巴兰

Yur*_*ich 7

var results = listData.Where((item, index) => listFilter[index] == 1);
Run Code Online (Sandbox Code Playgroud)

请注意,如果listData比listFilter长,则会失败,与代码相同.