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
如何使用linq组合、删除重复项并将两个集合排序为第三个集合_Linq - Fatal编程技术网

如何使用linq组合、删除重复项并将两个集合排序为第三个集合

如何使用linq组合、删除重复项并将两个集合排序为第三个集合,linq,Linq,A组:3、2、1 B组:3、4 生成的新集合:1、2、3(来自B,而不是A)、4 为了更清楚地说明这一点,下面是一个包含更多细节的示例: MyCustomClass[] list1 = { new MyCustomClass(3, "A"), new MyCustomClass(2, "B"), new MyCustomClass(1, "C") }; MyCustomClass[] list2 = { new MyCustomClass(3, "AA"), new MyCustomClas

A组:3、2、1

B组:3、4

生成的新集合:1、2、3(来自B,而不是A)、4

为了更清楚地说明这一点,下面是一个包含更多细节的示例:

MyCustomClass[] list1 = { new MyCustomClass(3, "A"), new MyCustomClass(2, "B"), new MyCustomClass(1, "C") };


MyCustomClass[] list2 = { new MyCustomClass(3, "AA"), new MyCustomClass(5, "D") };
名单应返回: 1C、2B、3AA、5D

编辑: 这里的诀窍是实现EqualityComparer,而不是IEqualityComparer,因为后者不被Union使用

var combined = list2.Union(list1, new MyEqualityComparer()).OrderBy(a=> a.Value);
这个怎么样:

var C = A.Union(B).OrderBy(i => i);

你说“从B开始,不是从A开始”是什么意思?3是3,它没有背景。为了清楚起见,这个例子用int表示。实际序列是具有键guid和值的对象。如果guid相同,我需要B的值,而不是A的值,因为它们会不同。您混淆了IEnumerable和List方法。Union返回一个IEnumerable,它没有排序扩展方法AFAIK。在排序之前调用ToList,或者使用OrderBy(i=>i)。另外,List.Sort()不返回任何内容-它是一个空的。@JaceRhea实际上,似乎Kirill是正确的,我已经编辑了我的答案。Union返回所有内容,包括重复项。所以它返回1,2,3,3,4。我需要第二个列表中的项目,如果它与第一个列表中的项目相同。Union不返回重复项。它返回1,2,3,4。两个对象具有相同的guid这一事实并不意味着它们相等,您必须自己实现该逻辑。