我正在尝试编写一个linq查询,它会给我这种类型的结果
所以我尝试按订单类型分组,可能是剩余或缺货。之后我通过 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
}
}
}
}
}
答案 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))
)
);