2017-04-05 89 views
1

我有一個類A,其中包含由類B描述的鍵/值對的數組。其中一個鍵稱爲「name」。我想使用LINQ建立一個Dictionary<string, Dictionary<string, string>>其中第一庫的關鍵是B數組中稱爲「名」屬性和值是一個包含B.從Linq使用數組構建字典

的鍵/值對
public class A 
{ 
    public int a; 
    public B[] b; 
} 

public class B 
{ 
    public string key; 
    public string value; 
} 

A[] a = new A[] 
{ 
    new A { a = 1, b = new B[] { new B { key = "name", value = "n1"}, new B { key = "test", value = "t1" } }, }, 
    new A { a = 2, b = new B[] { new B { key = "name", value = "n2"}, new B { key = "test", value = "t2" } }, }, 
};  

所以第二詞典其實我想建立在陣列「A」使用LINQ以下字典:

Dictionary<string, Dictionary<string, string>> d = new Dictionary<string, Dictionary<string, string>>() 
{ 
    { "n1", new Dictionary<string, string>() { { "name", "n1" }, { "test", "t1" } } }, 
    { "n2", new Dictionary<string, string>() { { "name", "n2" }, { "test", "t2" } } }, 
}; 

回答

2

它應該是:

var dict = a.ToDictionary(
    x => x.b[0].value, 
    y => y.b.ToDictionary(z => z.key, z => z.value) 
); 

這個LINQ表達的唯一「有趣」的是,我不得不使用高達z參數(xyz)......我花了三個彙編得到它的權利(我總是命名參數x

修訂徵求意見:

var dict = a.ToDictionary(
    x => x.b.First(y => y.key == "name").value, 
    y => y.b.ToDictionary(z => z.key, z => z.value) 
); 
+0

酷!參數「名稱」可以隨機放置在數組中(不一定是第一個元素)。我如何修改表達式來應對這個問題? – user957479

+0

@ user957479更新 – xanatos

+0

謝謝,當你看到結果時,它總是看起來很容易;-) – user957479