Linq查询:将键值对转换为通用对象列表

时间:2014-09-12 02:29:09

标签: linq dynamic

我有以下对象列表,它就像属性&它的价值。我需要将它转换为通用的对象列表。

public class Prop
{
    public string Name { get; set; }
    public string Value { get; set; }
} 

var list = new List<Prop>  {
    new Prop { Name = "x", Value = "10" },
    new Prop { Name = "y", Value = "11" },
    new Prop { Name = "z", Value = "12" },
    new Prop { Name = "x", Value = "101" },
    new Prop { Name = "y", Value = "102" },
    new Prop { Name = "z", Value = "103" }

};

实际上,我想将其转换为如下所示

var list2 = new List<xyx> {
    new  xyx { x = "10", y = "11", z = "12" },
    new  xyx { x = "101", y = "102", z = "103" }
};

public class xyx
{
    public string y { get; set; }
    public string x { get; set; }
    public string z { get; set; }
    public string d { get; set; }
}

1 个答案:

答案 0 :(得分:2)

这是在LINQ中完成的解决方案。我没有声称它是最有效的,我不确定LINQ是最好的方法,但它确实完成了工作。

我假设原始列表以3(x,y,z)为一组,但分组顺序无关紧要。

var list2 = list
    .Select((prop, index) => new { prop, index })
    .GroupBy(g => g.index / 3, g => g.prop) //make groups of 3
    .Select(g => new xyx { 
         x = g.First(prop => prop.Name == "x").Value,
         y = g.First(prop => prop.Name == "y").Value,
         z = g.First(prop => prop.Name == "z").Value
    })
    .ToList();