如何使用linq组合、删除重复项并将两个集合排序为第三个集合
A组:3、2、1 B组:3、4 生成的新集合:1、2、3(来自B,而不是A)、4 为了更清楚地说明这一点,下面是一个包含更多细节的示例:如何使用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
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这一事实并不意味着它们相等,您必须自己实现该逻辑。