从列表中查找存在于另一个列表中的项目

时间:2013-04-02 16:45:33

标签: c# linq collections lambda

我有List<PropA>

PropA  
{  
    int a;  
    int b;  
}

和另一个List<PropX>

PropX  
{  
    int a;  
    int b;  
}

现在,我必须使用lambda或LINQ在List<PropX>匹配 b 属性中找到List<PropA>中存在的项目。

4 个答案:

答案 0 :(得分:61)

ListA.Where(a => ListX.Any(x => x.b == a.b))

答案 1 :(得分:30)

您要做的是Join两个序列。 LINQ有一个Join运算符,可以完全执行:

List<PropX> first;
List<PropA> second;

var query = from firstItem in first
    join secondItem in second
    on firstItem.b equals secondItem.b
    select firstItem;

请注意,LINQ中的Join运算符也可以比通过第二个集合对每个项目执行线性搜索的简单实现更有效地执行此操作。

答案 2 :(得分:24)

var commonNumbers = first.Intersect(second); 

这将为您提供两个列表之间的公共值,更快更清晰的方法然后加入或其他Lambda表达式。

试试吧。

来源:MSDN

答案 3 :(得分:6)

如果您有多个参数,以上所有内容都无效,所以我认为这是最好的方法。

例如:找到宠物和宠物不匹配的物品2。

var notMatchedpets = pets
    .Where(p2 => !pets2
    .Any(p1 => p1.Name == p2.Name && p1.age == p2.age))
    .ToList();