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

标签 c# linq collections

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

关于c# - LINQ 根据字段从一个集合中删除与另一个集合中的元素不匹配的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552731/

相关文章:

c# - 使用 HTMLAgilityPack 进行 XHTML 解析

c# - 带依赖注入(inject)的 Hangfire RecurringJob

c# - 通过列表循环 foreach,为不同的值执行代码

c# - 带有复选框 where 条件组合的 linq to sql 查询

java - 比较java中的2个列表

c# - LINQ 查询以检查表中所有列中的谓词

c# - 如何使用 LINQ 从数组中删除重复项

c# - 为什么 Null 是一个无效的 LINQ 投影?

c# - 返回 null 或空集合更好吗?

c# - 在 session 中存储数据的最轻量级集合/通用/对象