为了说明问题我创建了简单的例子
public class Product
{
public int Id {get;set;}
public string Name {get;set;}
public List<string> Tags {get;set;}
}
List<Product> Products = new List<Product>()
{
new Product {
Id = 1,
Name = "Name1",
Tags = new List<string>{"1254","1234","4355"}
},
new Product {
Id = 2,
Name = "Name2",
Tags = new List<string>{"1254","1734","2375"}
},
new Product {
Id = 3,
Name = "Name3",
Tags = new List<string>{"1223","1234","4356"}
},
new Product {
Id = 4,
Name = "Name4",
Tags = new List<string>{"2345","12344","4357"}
}
};
List<string> tagsToRemove = new List<string>{"12344", "4355"};
所以,我希望从每个产品对象的Tags列表中删除tagsToRemove列表中的所有元素。 我可以在foreach循环中完成。
foreach (var tagToRemove in tagsToRemove)
{
Products.ForEach(i => i.Tags.Remove(tagToRemove));
}
但是我觉得可以用linq表达式以简单的方式完成,但是怎么做?
答案 0 :(得分:1)
LINQ并不是真正用于修改集合。我的代码如下:
首先,对HashSet
使用tagsToRemove
因为Contains
测试更有效(在这种情况下可能没什么区别):
var tagsToRemove = new HashSet<string>(new[] { "12344", "4355" });
然后,在每个RemoveAll
的{{1}}列表中使用Tags
方法:
product