2011-02-02 50 views
12

如何使用LINQ像下面合併兩個列表:如何使用LINQ合併兩個列表?

class Person 
{ 
    public int ID { get; set;} 
    public string Name { get; set;} 
    public Person Merge(Person p) 
    { 
     return new Person { ID = this.ID, Name = this.Name + " " + p.Name }; 
    } 
} 

我的人兩個List:

list1: 
1, A 
2, B 

list2: 
2, C 
3, D 

我要像下面

result: 
1, A 
2, B C 
3, D 

任何幫助的結果!

回答

19

我強烈建議不要使用字符串連接來表示這些信息;如果您希望稍後從合併列表中獲取原始數據,則需要執行不必要的字符串操作。此外,如果您決定爲課程添加其他屬性,則合併後的版本(如現狀)將變得有損。

優選地,擺脫Merge方法並使用適當的數據結構(例如多圖),其可以將一組鍵映射到一個或多個值。該Lookup<TKey, TElement>類可以達到這個目的:

var personsById = list1.Concat(list2) 
         .ToLookup(person => person.ID); 

總之,要回答這個問題是問,您可以連接兩個序列,然後通過他們的ID,然後一羣人聚集每組爲人與提供Merge方法:

var mergedList = list1.Concat(list2) 
         .GroupBy(person => person.ID) 
         .Select(group => group.Aggregate(
             (merged, next) => merged.Merge(next))) 
         .ToList(); 

編輯:在重新閱讀,只是意識到,需要連接,因爲有兩個列表。

+0

感謝您的建議,但發佈的代碼只是一個示例,而不是我的真實代碼。 – Homam 2011-02-02 10:08:17