Linq c#multiple group by

时间:2017-03-23 08:31:52

标签: c# linq

我正在尝试编写一个linq查询,它会给我这种类型的结果

enter image description here

所以我尝试按订单类型分组,可能是剩余缺货。之后我通过 Region 进行分组,然后我想知道每种masstype有多少缺陷。到目前为止,我已经实现了这个目标

var results = Order.GetActive().GroupBy(x => x.OrderType).
        Select(i => new { OrderType = i.Key, Orders = i.ToList().GroupBy(j => j.GetLocation().Region) });

现在我被困在尝试按masstype分组,然后计算总金额。例如,如果 masstype1 有10个剩余订单,我想显示一个累积金额的条目。

像这样的东西

{
'Region'{

    'Oslo'{

        'Masstype' {

            'Rock' {

                'Defict', 100
                'Surplus', 0
            },
            'Mud' {

                'Defict', 100
                'Surplus', 100
            }
        }
    }
}
}

1 个答案:

答案 0 :(得分:1)

从这个问题来看,很难知道输出的格式是什么,但是,您可以使用匿名类型按多个属性进行分组:

var groupedEntries = Order.GetActive().GroupBy(x => new {x.OrderType, x.GetLocation().Region, x.MassType})
编辑:在更新之后,看起来你想要一个像这样的结构:Dictionary<string, Dictionary<string, Dictionary<string, int>>>你可以使用下面的LINQ语句来实现,但是,此时,我建议创建一个新结构来保存这个数据:

var result = Order.GetActive()
    .GroupBy(a => a.OrderType)
    .ToDictionary(a => a.Key, a => a
        .GroupBy(b => b.GetLocation().Region)
        .ToDictionary(b => b.Key, b => b.
            GroupBy(c => c.MassType)
            .ToDictionary(c => c.Key, c => c.Sum(d => d.Value))
        )
    );