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我所发现的一切都是基于简单对象或相同对象的列表,而不是具有相似属性的唯一对象的列表。

Linq-Lambda语句从一个复杂对象列表中查找与另一个复杂物体列表中的元素匹配的元素

从概念上讲,这只是这两个表的连接。

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;