1
У меня есть следующая плоская структура:Агрегирование порядка строк в резюме заказа - как получить количество
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()
Name1 и Name2 - проблема в том, что, как только я доберусь до .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,
});
Как вы рассчитываете 'TotalPrice' в желаемых результатах? – MarcinJuraszek
FullItemPrice = Цена + (сумма подцентов). Итак, для A, 10 + (5 + 7 + 11) = 33, и есть 2 A, поэтому TotalPrice = 33 * 2 = 66 –