我有一个List<PropA>
PropA
{
int a;
int b;
}
和另一个List<PropX>
PropX
{
int a;
int b;
}
现在我必须使用 lambda 或 LINQ查找匹配bList<PropX>
属性中存在的项目。List<PropA>
我有一个List<PropA>
PropA
{
int a;
int b;
}
和另一个List<PropX>
PropX
{
int a;
int b;
}
现在我必须使用 lambda 或 LINQ查找匹配bList<PropX>
属性中存在的项目。List<PropA>
ListA.Where(a => ListX.Any(x => x.b == a.b))
你想要做的是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;
请注意,Join
LINQ 中的运算符也被编写为执行此操作,这比在第二个集合中对每个项目进行线性搜索的简单实现要高效得多。
var commonNumbers = first.Intersect(second);
这将为您提供两个列表之间的公共值,这是一种比 join 或其他 Lambda 表达式更快、更简洁的方法。
就试一试吧。
资料来源:MSDN
如果您有多个参数,那么以上所有方法都不起作用,所以我认为这是最好的方法。
例如:从 pets 和 pets2 中查找不匹配的项目。
var notMatchedpets = pets
.Where(p2 => !pets2
.Any(p1 => p1.Name == p2.Name && p1.age == p2.age))
.ToList();