Skip to main content
 首页 » 编程设计

c#之LINQ 根据字段从一个集合中删除与另一个集合中的元素不匹配的元素

2024年02月03日27zhujiabin

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

请您参考如下方法:

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();