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.g2 == MyObject2.g4的所有MyObject1对象,其中MyObject2对象位于列表2中
我编写的代码可以通过多个步骤执行此操作,但我认为我可以在一次迭代中执行此操作。
类似
var n = list1.Select(p=> p.g2).ToList()
var o = list2.Intersect(n)
但现在我需要再次使用o来研究list1,这很尴尬
答案 0 :(得分:13)
听起来你想要一个join:
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 };
答案 1 :(得分:4)
var query = list1.Where(l1 => list2.Any(l2=> l2.g4 == l1.g2));
答案 2 :(得分: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
项目的所有项目。