2011-05-09 53 views
1

.NET 4,I有Linq轉換自定義字典?

public class Humi 
{ 
public int huKey { get; set; } 
public string huVal { get; set; } 
} 

並且在另一類是此代碼的方法中:

IEnumerable<Humi> someHumi = new List<Humi>(); //This is actually ISingleResult that comes from a LinqToSql-fronted sproc but I don't think is relevant for my question 
var humia = new Humi { huKey = 1 , huVal = "a"}; 
var humib = new Humi { huKey = 1 , huVal = "b" }; 
var humic = new Humi { huKey = 2 , huVal = "c" }; 
var humid = new Humi { huKey = 2 , huVal = "d" }; 

我想建立一個單一的IDictionary <int,string[]>

與含有鍵1 [ 「a」,「b」]和包含[「c」,「d」]的密鑰2

任何人都可以指出一個體面的方式來與Linq進行轉換嗎?

謝謝。

回答

2
var myDict = someHumi 
    .GroupBy(h => h.huKey) 
    .ToDictionary(
     g => g.Key, 
     g => g.ToArray()) 

創建一個IEnumerable<IGrouping<int, Humi>>,然後將其投影到字典中。注意.ToDictionary返回一個字典,而不是一個IDictionary。

2

您可以使用ToLookup()這使得每個鍵容納多個值,正是您的方案(請注意,每個鍵將舉行,雖然不是一個數組值的IEnumerable<string>):

var myLookup = someHumi.ToLookup(x => x.huKey, x => x.huVal); 

foreach (var item in myLookup) 
{ 
    Console.WriteLine("{0} contains: {1}", item.Key, string.Join(",", item)); 
} 

輸出:

1包含:A,b

2包含:C,d