Linq Lambda语句用于从一个复杂对象列表中查找元素,这些复杂对象与另一个复杂对象列表中的元素匹配

时间:2014-06-26 19:11:35

标签: c# linq list lambda

请考虑以下事项:

对象A具有属性:

Name
Location

对象B具有属性:

Nickname
Name
Location
City
State

我有List<ObjectA>List<ObjectB>

我正在尝试制定一个linq语句,该语句将返回List<ObjectB>中存在NameLocation List<ObjectA>的所有对象{{1}} 我发现的所有内容都基于简单对象或相同对象的列表,而不是具有相似属性的唯一对象列表。

4 个答案:

答案 0 :(得分:2)

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

var query = listB.GroupJoin(listA,
    b => new{ b.Name, b.Location},
    a => new{ a.Name, a.Location},
    (b,matchingAs) => b);

答案 1 :(得分:1)

listB.Where(x => listA.Any(a => a.Name == x.Name && a.Location == x.Location));

答案 2 :(得分:0)

您可以加入不同类型的列表,并使用匿名类型来定义&#34;相等&#34;:

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;

答案 3 :(得分:0)

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中具有匹配名称和位置的对象