2015-03-13 25 views
5

我有一個列表和MyClass的是:清單詞典<鍵,列表<Value>> - C#

public class MyClass 
{ 
    public bool Selected { get; set; } 
    public Guid NoticeID { get; set; } 
    public Guid TypeID { get; set; } 
} 

我的問題是,如何轉換這個名單爲Dictionary<Guid, List<Guid>>,在字典的鍵是GUID來自TypeID屬性,並且該值是與TypeID對應的所有NoticeID值的列表。我試圖像這樣:

list.GroupBy(p => p.TypeID).ToDictionary(p => p.Key, p => p.ToList()) 

但這返回一個Dictionary <Guid, List<MyClass>>,我想一個Dictionary<Guid, List<Guid>>

+0

這並不完全清楚你的意思是「但這會返回一個'>'。你想獲得什麼GUID作爲價值? – 2015-03-13 07:21:02

+0

很顯然,TypeID是第一個Guid in Dictionary >並且NoticeID是第二個...我在linq子句中提到了 – raresm 2015-03-13 07:31:38

+1

因爲您沒有實際說明它,所以它不是真的很明顯。我們可以推斷出來,但如果你明確地說過,並且還指定了「一個字典」,那麼列表>而不是「一個>'會是一個更好的問題。編輯你的問題,告訴你我的意思 - 我認爲你會同意後更清楚 – 2015-03-13 08:10:42

回答

15

那麼,當你組,你可以指定要用於組的每個元素的值:

var dictionary = list.GroupBy(p => p.TypeID, p => p.NoticeID) 
        .ToDictionary(p => p.Key, p => p.ToList()); 

但是,我會認真考慮使用,而不是一個字典查找:

var lookup = list.ToLookup(p => p.TypeID, p => p.NoticeID); 

查找通常更清潔:

  • 它們是不可改變的,而您的方法最終與lis ts可以修改
  • 它們在類型系統中完全表達您想要表達的內容(一個鍵值爲多個值)
  • 它們通過返回缺少鍵的空值序列來使查找鍵更容易,而比拋出異常
+0

謝謝你給我介紹一個非常聰明和方便的類型 - 可以確認任何人仍然使用像這樣的列表字典,這種方法非常適合用途 – Toadfish 2017-05-26 01:14:42

相關問題