2013-06-02 65 views
0

收藏答:3,2,1個如何合併,刪除重複和排序兩個集合到第三集合與LINQ

集合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 <>,NOT的IEqualityComparer <>不使用聯盟。

var combined = list2.Union(list1, new MyEqualityComparer()).OrderBy(a=> a.Value); 
+1

你有什麼 '從B,不是A' 是什麼意思? 3是3,它沒有背景故事。 – Rotem

+0

爲了清楚起見,示例在int中。實際的序列是具有一個鍵的GUID和一個值的對象。如果guid是相同的,我需要B的值,而不是A,因爲它們會有所不同。 –

回答

2

如何:

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

你混淆IEnumerable和列表的方法。聯盟返回一個IEnumerable ,它沒有排序擴展方法AFAIK。在排序之前調用ToList,或者使用OrderBy(i => i)。還列出了的.sort()不返回任何東西 - 這是一個空白。 –

+0

@JaceRhea其實這似乎基里爾是正確的,我已經編輯我的答案。 – Rotem

+0

聯盟會返回所有郵件,包括重複郵件。所以它返回1,2,3,3,4。我需要第二個列表中的項目,如果它與第一個列表中的項目相同。 –