LINQ从一个集合中删除与基于字段的另一个集合中的元素不匹配的元素

时间:2011-09-26 08:50:28

标签: c# linq collections

我有2个不同对象的列表,例如列表和列表。我想删除第一个列表中的所有对象,其中字段的值与第二个列表中字段的值不匹配。
例如,我想从第一个列表中删除所有Type1对象,其中Type1.name(字符串)成员与第二个列表中的Type2.id(字符串)成员不匹配。
LINQ可以实现吗?

2 个答案:

答案 0 :(得分:5)

LINQ不是要修改现有的集合 - 而是关于运行查询。如果您需要更改列表,可能需要以下内容:

HashSet<string> ids = new HashSet<string>(list2.Select(x => x.Id));
list1.RemoveAll(x => !ids.Contains(x.Name));

在“普通”LINQ中你可以用:

// I'm assuming no duplicate IDs in list2 
var query = (from x in list1
             join y in list2 on x.Name equals y.Id
             select x).ToList();

答案 1 :(得分:0)

您也可以使用lambda:

var query = (list1.Join(list2, x => x.Name, y => y.Id, (x, y) => x)).ToList();

var query = (Enumerable.Join(list1, list2, x => x.Name, y => y.Id, (x, y) => x)).ToList();