Linq-Lambda语句从一个复杂对象列表中查找与另一个复杂物体列表中的元素匹配的元素
本文关键字:元素 复杂 列表 另一个 语句 查找 一个 对象 Linq-Lambda | 更新日期: 2023-09-27 18:10:22
考虑以下内容:
对象A具有属性:
Name
Location
对象B具有属性:
Nickname
Name
Location
City
State
我有一个List<ObjectA>
和List<ObjectB>
我正在尝试计算一个linq语句,它将返回来自List<ObjectB>
的所有对象,这些对象具有Name
和存在于List<ObjectA>
中的Location
我所发现的一切都是基于简单对象或相同对象的列表,而不是具有相似属性的唯一对象的列表。
从概念上讲,这只是这两个表的连接。
var query = listB.GroupJoin(listA,
b => new{ b.Name, b.Location},
a => new{ a.Name, a.Location},
(b,matchingAs) => b);
listB.Where(x => listA.Any(a => a.Name == x.Name && a.Location == x.Location));
List<ObjectA> listA = new List<ObjectA>();
List<ObjectB> listB = new List<ObjectB>();
List<ObjectB> commonList = listB.Where(b => listA.Any(a => b.Name == a.Name && a.Location == b.Location)).ToList();
这将为您提供B中所有在列表a 中具有匹配名称和位置的对象
您可以加入不同类型的列表,并使用匿名类型来定义"相等":
var query =
from b in listB
join a in listA into As
on new {b.Name, b.Location} equals new {a.Name, a.Location}
select b;