我有以下对象列表,它就像属性&它的价值。我需要将它转换为通用的对象列表。
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; }
}
答案 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();