2012-07-25 47 views
4

我有兩個共享兩個公共屬性Id和Information的類。將兩個類合併到使用LINQ的字典中

public class Foo 
{ 
    public Guid Id { get; set; } 

    public string Information { get; set; } 

    ... 
} 
public class Bar 
{ 
    public Guid Id { get; set; } 

    public string Information { get; set; } 

    ... 
} 

使用LINQ,我怎麼能採取的Foo對象填充的列表和酒吧對象填充的列表:

var list1 = new List<Foo>(); 
var list2 = new List<Bar>(); 

合併 Id和各信息到一個單一的詞典:

var finalList = new Dictionary<Guid, string>(); 

在此先感謝您。

+0

你想有,如果有發生什麼事做兩個具有相同ID但信息不同的項目? – 2012-07-25 17:46:09

+0

@ErikPhilips這種可能性不會發生,所以它不是我需要處理的。 – Jonathan 2012-07-25 17:46:54

+0

檢查這裏的解決方案:http://stackoverflow.com/questions/4038978/map-two-lists-into-a-dictionary-in-c-sharp – 2012-07-25 17:48:23

回答

8

聽起來像是你可以這樣做:

// Project both lists (lazily) to a common anonymous type 
var anon1 = list1.Select(foo => new { foo.Id, foo.Information }); 
var anon2 = list2.Select(bar => new { bar.Id, bar.Information }); 

var map = anon1.Concat(anon2).ToDictionary(x => x.Id, x => x.Information); 

(你可以做到這一切在一個聲明,但我認爲這是更清楚的方式)

+0

一如既往的Jon,Jon。謝謝。 – Jonathan 2012-07-26 23:51:32

0
var finalList = list1.ToDictionary(x => x.Id, y => y.Information) 
      .Union(list2.ToDictionary(x => x.Id, y => y.Information)) 
         .ToDictionary(x => x.Key, y => y.Value); 

確保ID是唯一的。如果不是,它們將被第一個字典覆蓋。

編輯:添加.ToDictionary(x => x.Key,y => y.Value);

+2

這不會導致字典... – 2012-07-25 17:50:11

+0

感謝喬恩,現在應該工作。 – 2012-07-25 18:03:30

+2

是的,它會工作 - 但它似乎有點浪費,國際海事組織。爲什麼要構建三個字典*和*時,只需連接並使用單個ToDictionary調用,就可以通過集合操作進行操作? – 2012-07-25 18:06:44