don*_*ack 36 c# linq collections lambda
我有一个 List<PropA>
PropA
{
int a;
int b;
}
Run Code Online (Sandbox Code Playgroud)
和另一个 List<PropX>
PropX
{
int a;
int b;
}
Run Code Online (Sandbox Code Playgroud)
现在我必须使用lambda或LINQ 找到匹配b属性中List<PropX>
存在的项目.List<PropA>
Adr*_*ong 65
ListA.Where(a => ListX.Any(x => x.b == a.b))
Run Code Online (Sandbox Code Playgroud)
Ser*_*rvy 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;
Run Code Online (Sandbox Code Playgroud)
请注意,Join
LINQ 中的运算符也被编写为比通过第二个集合对每个项目进行线性搜索的简单实现更有效地执行此操作.
Amb*_*buj 26
var commonNumbers = first.Intersect(second);
Run Code Online (Sandbox Code Playgroud)
这将为您提供两个列表之间的公共值,更快更清晰的方法然后加入或其他Lambda表达式.
就试一试吧.
资料来源:MSDN
如果您有多个参数,以上所有内容都无效,所以我认为这是最好的方法.
例如:找到宠物和宠物不匹配的物品2.
var notMatchedpets = pets
.Where(p2 => !pets2
.Any(p1 => p1.Name == p2.Name && p1.age == p2.age))
.ToList();
Run Code Online (Sandbox Code Playgroud)