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

public class MyObject2
{
    public Guid g4;
}


List<MyObject1> list1;
List<MyObject2> list2;

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

我已经编写了在许多步骤中执行此操作的代码,但我认为我可以在一次迭代中完成。

所以像

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

var o = list2.Intersect(n)

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

4

3 回答 3

14

听起来您想要加入

var query = from x1 in list1
            join x2 in list2 on x1.g2 equals x2.g4
            select x1;

或者在扩展方法语法中:

var query = list1.Join(list2, x1 => x1.g2, x2 => x2.g4, (x1, x2) => x1);

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

var query = from x1 in list1
            join x2 in list2 on x1.g2 equals x2.g4
            select new { x1, x2 };
于 2013-04-05T21:25:40.417 回答
8
var query = list1.Where(l1 => list2.Any(l2=> l2.g4 == l1.g2));
于 2013-04-05T21:32:06.967 回答
1

这个怎么样:

var results = 
    from a in list1
    join b in list2 on a.g2 equals b.g4
    select a;

这将返回所有项目list1中存在的list2项目MyObject1.g2 == MyObject2.g4

于 2013-04-05T21:26:19.873 回答