我有一个简单的设置(如下)。每个“部件”都包含零件列表。装配体内可能有重复的“零件”对象。
我的目标是合并零件对象(按ID)并求和。
最终结果应如下所示(每个零件的数量相加):
*12* *5* *3*
4* 1 2 3 *4
9* 4 5 6 *9
7* 7 8 9 *7
请查看下面“控制台输出”下的代码,以获取当前的提示。
我尝试了以下LINQ(失败):
[Assembly 1]
[3] Part 1
[8] Part 2
[4] Part 3
[Assembly 2]
[3] Part 1
[15] Part 3
代码:
List<Assembly> listAssy2 = listAssy.SelectMany(a => a.listParts.GroupBy(b => b.qty)).ToList();
答案 0 :(得分:1)
这应该做到:
var summaries = listAssy
.Select(a => new {
a.id,
a.title,
partQuantities = a.listParts.GroupBy(p => new { p.id, p.title })
.Select(g => new { g.Key.id, g.Key.title, qty = g.Sum(p => p.qty)})
.ToList()
});
foreach (var assy in summaries)
{
Console.WriteLine("[" + assy.title + "]");
foreach (var part in assy.partQuantities)
{
Console.WriteLine(" [" + part.qty + "] " + part.title);
}
Console.WriteLine("");
}