Linq比较两个对象列表,其中一个对象有多个列表

KCI*_*ing 4 c# linq

public class MyObject1
{
    public  Guid g1;
    public Guid g2;
    public Guid g3;
}

public class MyObject2
{
    public Guid g4;
}


List<MyObject1> list1;
List<MyObject2> list2;
Run Code Online (Sandbox Code Playgroud)

我想要一个LINQ查询,它将返回list1中的所有MyObject1对象,其中MyObject1.g2 == MyObject2.g4,其中MyObject2对象位于列表2中

我编写的代码可以在很多步骤中完成,但我认为我可以在一次迭代中完成.

所以像

var n = list1.Select(p=> p.g2).ToList()

var o = list2.Intersect(n)
Run Code Online (Sandbox Code Playgroud)

但现在我需要再次使用o研究list1,这很尴尬

Jon*_*eet 13

听起来你想要一个加入:

var query = from x1 in list1
            join x2 in list2 on x1.g2 equals x2.g4
            select x1;
Run Code Online (Sandbox Code Playgroud)

或者在扩展方法语法中:

var query = list1.Join(list2, x1 => x1.g2, x2 => x2.g4, (x1, x2) => x1);
Run Code Online (Sandbox Code Playgroud)

请注意,这只会为您提供项目list1- 如果您还需要相应的项目list2,那很简单:

var query = from x1 in list1
            join x2 in list2 on x1.g2 equals x2.g4
            select new { x1, x2 };
Run Code Online (Sandbox Code Playgroud)


aru*_*lam 8

var query = list1.Where(l1 => list2.Any(l2=> l2.g4 == l1.g2));
Run Code Online (Sandbox Code Playgroud)