删除对象集合中对象列表的元素

时间:2018-02-27 15:52:33

标签: c# linq

为了说明问题我创建了简单的例子

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表达式以简单的方式完成,但是怎么做?

1 个答案:

答案 0 :(得分:1)

LINQ并不是真正用于修改集合。我的代码如下:

首先,对HashSet使用tagsToRemove因为Contains测试更有效(在这种情况下可能没什么区别):

var tagsToRemove = new HashSet<string>(new[] { "12344", "4355" });

然后,在每个RemoveAll的{​​{1}}列表中使用Tags方法:

product