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

本文关键字:集合 元素 于字段 不匹配 字段 删除 一个 LINQ 另一个 | 更新日期: 2023-09-27 18:09:44

我有2个不同对象的列表,例如列表和列表。我想删除第一个列表中字段值与第二个列表中字段值不匹配的所有对象。
我想从第一个列表中删除Type1.name (string)成员不匹配Type2的所有Type1对象。第二个列表中的Id (string)成员。

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

LINQ不是关于修改现有的集合-它是关于运行查询。如果您需要在适当的位置更改列表,您可能需要这样的内容:

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

在"normal" 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();

您也可以使用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();