我有List<PropA>
PropA
{
int a;
int b;
}
和另一个List<PropX>
PropX
{
int a;
int b;
}
现在,我必须使用lambda或LINQ在List<PropX>
匹配 b 属性中找到List<PropA>
中存在的项目。
答案 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();