我有一个列表,当前将返回类似这样的内容。 Att列可以是任何内容,因为用户可以随时输入Att和Value。
var attr_vals = (from mpav in _db.MemberProductAttributeValues
select mpav);
结果
Id Att Value
1 Color Blue
1 Size 30
1 Special Slim
3 Color Blue
4 Size 30
2 Special Slim
2 Random Foo Foo
我正在寻找的转换将与此类似
已转换的结果
Id Color Size Special Random
1 Blue 30 Slim null
2 null null null Foo Foo
3 Blue null null null
4 null 52 null null
到目前为止,类看起来像这样。
public class MyMappProducts
{
public int? id { get; set; }
public Dictionary<string, string> Attributes { get; set; }
string GetAttribute(string aName)
{
return Attributes[aName];
}
void setAttribute(string aName, string aValue)
{
Attributes[aName] = aValue;
}
}
答案 0 :(得分:3)
因此,鉴于您的属性列表可能会更改,因此将每个属性作为一个属性来创建一个类并不好,因为您必须事先了解所有属性,因此使用字典更加容易。
这是您想要做的一种方法(请注意,字典中不存在每行缺少的属性)
var list = new List<AttributeValue>
{
new AttributeValue(1, "Color", "Blue"),
new AttributeValue(1, "Size", "30"),
new AttributeValue(1, "Special", "Slim"),
new AttributeValue(3, "Color", "Blue"),
new AttributeValue(4, "Size", "30"),
new AttributeValue(2, "Special", "Slim"),
new AttributeValue(2, "Random", "Foo Foo")
};
// First we groupby the id and then for each group (which is essentialy a row now)
// we'll create a new MyMappProducts containing the id and its attributes
var result = list.GroupBy(av => av.Id)
.Select(g => new MyMappProducts
{
id = g.Key,
Attributes = g.ToDictionary(av => av.Attribute, av => av.Value)
})
.ToList();
这将导致(精美打印):
[
{
"id": 1,
"Attributes": {
"Color": "Blue",
"Size": "30",
"Special": "Slim"
}
},
{
"id": 3,
"Attributes": {
"Color": "Blue"
}
},
{
"id": 4,
"Attributes": {
"Size": "30"
}
},
{
"id": 2,
"Attributes": {
"Special": "Slim",
"Random": "Foo Foo"
}
}
]