根据另一个列表中的真实条件从通用列表中选择项目
本文关键字:列表 项目 选择 真实 另一个 条件 | 更新日期: 2023-09-27 18:32:34
我想知道是否有任何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);
列表 2
List<int> listFilter = List<int>();
listFilter.Add(1);
listFilter.Add(0);
listFilter.Add(0);
listFilter.Add(1);
我想根据"列表过滤器"中真正的 (1) 标准过滤"列表数据"。对于上面的例子,我必须能够将数据 1 和 data4 拉入新列表中。
目前,我正在使用 for 循环来实现这一点,如下所示。
List<Data> listResult = new List<Data>();
for(int index=0; index<listData.Count; index++)
{
if(listFilter[index]==1)
{
listResult.Add(listData[index]);
}
}
如果有人能告诉我如何使用 LINQ 或 Lambda 表达式来实现这一点,我将不胜感激。
谢谢
巴兰
var results = listData.Where((item, index) => listFilter[index] == 1);
请注意,如果 listData 比 listFilter 长,这将失败,与您的代码相同。
在一般情况下,您可以执行以下操作:
var result = listData.Zip(listFilter, (data, filter)
=> new { Data = data, Filter = filter })
.Where(tuple => tuple.Filter == 1)
.Select(tuple => tuple.Data)
.ToList();
var listResult = listData
.Where((data, index) => listFilter[index] == 1)
.ToList();
参考:
http://msdn.microsoft.com/en-us/library/bb548547.aspx