Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq比较两个对象列表,其中一个对象有多个列表_C#_Linq - Fatal编程技术网

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

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

但是现在我需要再次使用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 => 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));