Lambda表达式,用于筛选项目列表
本文关键字:项目 列表 筛选 用于 表达式 Lambda | 更新日期: 2023-09-27 18:28:29
我有一个项目列表,我想知道是否有人可以帮助我使用lambda表达式来过滤这个列表。
以下是我的列表:
List<List<Item>> myList = ExtractList();
以下是我的Item类的样子:
public class Item {
public string Name {get;set;}
public string Action {get;set;}
}
我想筛选此列表,只获取项目名称="ABC"且项目操作="123"的项目列表。
感谢您的帮助
简单:
myList.SelectMany(sublist => sublist)
.Where(item => item.Name == "ABC" && item.Action == "123");
这将为您提供所有列表中的所有项目。
如果您想选择包含该项目的子列表:
myList.Where(sublist => sublist.Any(item => item.Name == "ABC" && item.Action == "123"));
最后,如果你想保留相同的结构,但只保留与过滤器匹配的项目:
var newList = myList.Select(sublist => sublist
.Where(item => item.Name == "ABC" && item.Action == "123")
.ToList()).ToList();
以下是一个列表,该列表中包含一个匹配Name="ABC"和Action="123"的项。
var newList = myList.Where(l =>
l.Exists(i => i.Name == "ABC"
&& i.Action == "123")).ToList();
如果你只需要一个符合条件的列表项目列表,你可以这样做:
var newList = (from l in myList
where l.Exists(i => i.Name == "ABC" && i.Action == "123")
select l.Where(i => i.Name == "ABC" && i.Action == "123").ToList()).ToList();
要使上面的列表变平(转换为一个简单的列表,而不是列表列表),您必须执行foreach
循环:
List<Item> newList2 = new List<Item>();
foreach(var list in newList)
{
newList2.AddRange(list);
}
我认为简单的LINQ语法是最容易阅读的:
var newList =
// gets the list of items
from listOfItems in myList
// extracts the list of items
from item in listOfItems
// filters by criteria
where item.Name == "ABC" && item.Action == "123"
// flattens into a IEnumerable<Item>
select item;
这可能会起作用;
List<Item> Items = new List<Item>();
myList.ForEach((item)=>
{
var items = item.Where(q=> q.Action == "123" && q.Name =="ABC");
Items.AddRange(items);
});