C#Linq按ID和总数进行合并

时间:2019-06-12 21:32:20

标签: c# linq group-by

我有一个简单的设置(如下)。每个“部件”都包含零件列表。装配体内可能有重复的“零件”对象。

我的目标是合并零件对象(按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();

1 个答案:

答案 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("");
}