按 2 个属性聚合列表项并在 C# 中对第 3 个进行求和

Aggregating list items by 2 properties and summing the 3rd in C#

我有一个包含三个属性的对象列表 LoggedRestartsReleaseBuildNumberOfRestarts。前两个包含许多重复项,第三个 属性 可能具有不同的值。我想将它们合二为一并对 NumberOfRestarts 求和;与我在 python 中所写的完全相同:df = df.groupby(['Release','Build'], as_index=False)['NumberOfRestarts'].sum().

假设我的列表中有这些 LoggedRestarts 类型的对象:

    Release-----------------Build---------------NumberOfRestarts
(1) 12.21------------------Build1---------------1
(2) 12.21------------------Build1---------------2

我希望它变成这样:

    Release-----------------Build---------------NumberOfRestarts
(1) 12.21------------------Build1---------------3

目前我有以下代码,但实际上并没有用,因为仍有未聚合的值。

for (int i = 0; i < loggedRestartsList.Count; i++)
     {
        if (loggedRestartsList[i].release == loggedRestartsList[i + 1].release
            & loggedRestartsList[i].build == loggedRestartsList[i + 1].build)
        {
           loggedRestartsList[i+1].numberOfRestarts = loggedRestartsList[i].numberOfRestarts + loggedRestartsList[i + 1].numberOfRestarts;
           loggedRestartsList.RemoveAt(i);
        }
     }

我也找到了这样的解决方案:Linq: GroupBy, Sum and Count 但我无法解决这个问题。

因此,我怎样才能完成上述操作?

您可以使用 LINQ 的 GroupBy:

List<(string Release, string Build, int NumberOfRestarts)> releaseBuildGroups = loggedRestartsList
    .GroupBy(x => (x.Release, x.Build))
    .Select(g => (g.Key.Release, g.Key.Build, g.Sum(x => x.NumberOfRestarts)))
    .ToList();

除了使用 ValueTuple,您还可以初始化 class.

的新实例