【发布时间】:2018-01-25 00:22:07
【问题描述】:
我有一个订单数组,每个订单里面都是一个商品数组。如何按商品名称对所有订单进行分组并获取订购商品的总和。在这种情况下,输出将是:
输出
Item01 : quantity = 2;
Item02 : quantity = 45;
获取订单
public Order[] GetOrders()
{
Order[] orders = new Order[]
{
new Order
{
id = 1,
orderLines = new OrderLine[]
{
new OrderLine
{
itemName = "Item 01",
quantity = 1
},
new OrderLine
{
itemName = "Item 02",
quantity = 3
},
},
},
new Order
{
id = 2,
orderLines = new OrderLine[]
{
new OrderLine
{
itemName = "Item 01",
quantity = 1
},
new OrderLine
{
itemName = "Item 02",
quantity = 42
}
}
}
};
...
我尝试了以下方法:
foreach (var order in orders)
{
foreach (var orderline in order.orderLines.GroupBy(x => x.itemName).Select(group => new
{
Metric = group.Key,
Count = group.Count()
}))
{
Console.WriteLine("{0} {1}", orderline.Metric, orderline.Count);
}
}
但它只为每个项目返回 1。我对编程比较陌生,所以请放轻松。谢谢
【问题讨论】:
-
您必须以 SelectMany() 开头,才能将子列表扁平化为单个可枚举。然后你可以做你的分组等。
标签: c# arrays linq group-by count