我有以下平面结构:
Name1 | Name2 | Price | SubName | SubPrice
------+-------+-------+---------+---------
A | one | 10 | X | 5
A | one | 10 | Y | 7
A | one | 10 | Z | 11
A | one | 10 | X | 5
A | one | 10 | Y | 7
A | one | 10 | Z | 11
A | two | 16 | X | 5
A | null | 9 | null | null
B | three | 24 | null | null
它需要转换为以下内容:
{
0 = {
Name = "A one X, Y, Z",
Quantity = 2,
TotalPrice = 66,
},
1 = {
Name = "A two X",
Quantity = 1,
TotalPrice = 21,
},
2 = {
Name = "A",
Quantity = 1,
TotalPrice = 9,
},
3 = {
Name = "B three",
Quantity = 1,
TotalPrice = 24,
}
}
理论很简单——.GroupBy()
名字 1 和名字 2——问题是一旦我.Select()
离开小组,我永远无法得到正确的数量......我知道这应该很简单,但我似乎无法理解它。 ..
items
.GroupBy(item => new
{
item.Name1,
item.Name2,
})
.Select(grouping => new
{
Name = grouping.Key.Name1 + " " + grouping.Key.Name2,
Price = grouping.Key.Price,
Subs = grouping.GroupBy(groupItem => new
{
groupItem.SubName,
groupItem.SubPrice,
}),
})
.Select(temp => new
{
Name = temp.Name + (temp.Subs.Any() ? " " + temp.Subs.Select(sub => sub.SubName).Aggregate((a, b) => (a + ", " + b)) : string.Empty),
FullItemPrice = temp.Price + temp.Subs.Sum(subPrice => subPrice ?? 0m),
Quantity = ???,
})
.Select(output => new
{
output.Name,
output.Quantity,
TotalPrice = output.FullItemPrice * output.Quantity,
});