C# Linq比较两个对象列表,其中一个对象有多个列表
但是现在我需要再次使用o来研究列表1,这很尴尬,听起来你想要一个: 或在扩展方法语法中:C# Linq比较两个对象列表,其中一个对象有多个列表,c#,linq,C#,Linq,但是现在我需要再次使用o来研究列表1,这很尴尬,听起来你想要一个: 或在扩展方法语法中: var query = from x1 in list1 join x2 in list2 on x1.g2 equals x2.g4 select x1; 请注意,这只会为您提供list1中的项目-如果您还需要list2中的相应项目,这很简单: var query = list1.Join(list2, x1 => x1.g2, x2 => x
var query = from x1 in list1
join x2 in list2 on x1.g2 equals x2.g4
select x1;
请注意,这只会为您提供list1
中的项目-如果您还需要list2
中的相应项目,这很简单:
var query = list1.Join(list2, x1 => x1.g2, x2 => x2.g4, (x1, x2) => x1);
这个怎么样:
var query = from x1 in list1
join x2 in list2 on x1.g2 equals x2.g4
select new { x1, x2 };
这将返回
list1
中的所有项目,其中list2
中有一个项目具有MyObject1.g2==MyObject2.g4
+1 Jon,我希望您不要再使用这种狡猾的扩展方法join语法作为替代;)@mattytommo-但是。。。我喜欢分机methods@ScottSelby即使是连接和分组方式?Eeeek:P@mattytommo:这是一个不需要透明标识符的联接。这只是一个简单的投影到连接的一半。如果有一个更复杂的select
子句,我就不会为扩展方法语法而烦恼了——这肯定一点也不“不可靠”。(我也可以使用GroupBy
的扩展方法形式,它最终更具可读性,这是肯定会发生的。不必担心“总是对连接和分组使用查询扩展语法”。)如果有多个匹配的列,结果仍然只有一列
var results =
from a in list1
join b in list2 on a.g2 equals b.g4
select a;
var query = from x1 in list1
join x2 in list2 on x1.g2 equals x2.g4
select new { x1, x2 };
var results =
from a in list1
join b in list2 on a.g2 equals b.g4
select a;
var query = list1.Where(l1 => list2.Any(l2=> l2.g4 == l1.g2));