我有这段代码可以过滤包含“ abcd”的LabelType。 list1是一个包含部件列表的列表(包含字符串LabelType)
foreach (var elem in list1)
{
elem.Parts = elem.Parts.Where(p => p.LabelType != "abcd").ToList();
}
如何使用linq将其全部转换为一行?
答案 0 :(得分:4)
只需选择您可以使用Where
进行过滤的项目,然后应用Any
即可检查您想要的(p.LabelType != "abcd")
情况的发生:
var result = list1.Where(x => x.Parts.Any(p => p.LabelType != "abcd"))
.ToList();
现在,如果要修改Parts
属性的内容,那么更改循环范围内的元素并不是一个好习惯。您可以尝试:
var result = list1.Select(x =>
{
x.Parts = x.Parts.Where(p => p.LabelType != "abcd")).ToList();
return x;
})
.ToList();
在“选择”作用域中,您可以对元素(x)进行更改,但可以inside of this there is a loop进行更改,因此,与使用foreach相同但在设计级别上,结果是一个命令。这里没有性能提升。