清单清单的where子句

时间:2019-02-22 12:20:27

标签: c# linq

我有这段代码可以过滤包含“ abcd”的LabelType。 list1是一个包含部件列表的列表(包含字符串LabelType)

foreach (var elem in list1)
{
    elem.Parts = elem.Parts.Where(p => p.LabelType != "abcd").ToList();
}

如何使用linq将其全部转换为一行?

1 个答案:

答案 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相同但在设计级别上,结果是一个命令。这里没有性能提升。