使用Linq

时间:2017-04-05 06:21:50

标签: c# .net arrays linq dictionary

我有一个A类,它包含由B类描述的键/值对数组。其中一个键称为&#34; name&#34;。我想使用Linq构建一个Dictionary<string, Dictionary<string, string>>,其中第一个字典的键是名为&#34; name&#34;在B数组中,值是包含B的键/值对的第二个字典。

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" } }, },
};    

所以实际上我想在阵列上使用Linq构建以下字典&#34; a&#34;:

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" } } },
};

1 个答案:

答案 0 :(得分:2)

应该是:

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

唯一的#34;有趣的&#34;这个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)
);