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