2012-08-14 24 views
2

我的客戶對象的列表(例如:名單客戶)如何將對象列表轉換爲兩級字典?

public class Customer 
    { 
     public int ID { get; set; } 
     public string City { get; set; } 
     public bool DidLive { get; set; } 
    } 

我需要做的就是這個「客戶」集合轉換成dictionary喜歡如下,

「字典< INT ,字典<字符串,布爾> >「 其中外鍵是」ID「,內鍵是」城市「。

這可以使用"GroupBy""ToDictionary"擴展方法"IEnumerable<T>"來完成嗎?

+4

什麼用內部字典'詞典<字符串,布爾>'什麼時候會只有一個項目的地方。 – 2012-08-14 16:51:51

+0

總之:是的。分組你的小組,從裏到外製作一本字典。 – 2012-08-14 16:53:50

回答

4

我在這裏假設你有多個具有相同ID但具有不同城市的Customer對象(如果情況並非如此,內部字典將始終包含一個項目,請使用@ oleksii的答案)。

var result = customers.GroupBy(c => c.Id) 
         .ToDictionary(group => group.Key, 
            group => group.ToDictionary(c => c.City, 
                   c => c.DidLive)); 

當然,這將拋出一個異常,如果有多個客戶提供相同的ID 城市。

+0

謝謝你,你的方法有效。其實我有「在不同城市生活(或不在)的不同客戶」。我想得到的是一本字典,它給我客戶身份證和他們的城市名稱,不管他們是否居住過。 – Cheranga 2012-08-15 02:30:31

1

這是一個啓動

var data = new List<Customer>(); 

data.ToDictionary(item => item.ID, 
        item => new Dictionary<string, bool> 
        { 
         {item.City,item.DidLive} 
        }); 
+0

謝謝。其實我有「在不同城市生活(或不在)的不同客戶」。我想得到的是一本字典,它給我客戶身份證和他們的城市名稱,不管他們是否居住過。因此,在這種情況下,您的方法通過給出一個ArguementException來聲明「具有相同密鑰的項目已被添加」。但「Ani」的方法起作用。感謝您的時間! – Cheranga 2012-08-15 02:32:38