gpt4 book ai didi

c# - 如何使用 LINQ 按组合并/求和记录?

转载 作者:可可西里 更新时间:2023-11-01 08:37:18 27 4
gpt4 key购买 nike

例如,我如何使用 LINQ 按 GroupId 对以下记录进行分组,并对每个组中的所有其他列求和? (从而将每组中的所有行合并为一个)

var list = new List<Foo>()
{
new Foo() { GroupId = 0, ValueA = 10, ValueB = 100 },
new Foo() { GroupId = 1, ValueA = 30, ValueB = 700 },
new Foo() { GroupId = 1, ValueA = 40, ValueB = 500 },
new Foo() { GroupId = 2, ValueA = 80, ValueB = 300 },
new Foo() { GroupId = 2, ValueA = 20, ValueB = 200 },
new Foo() { GroupId = 2, ValueA = 20, ValueB = 200 }
};

预期结果是:

| GroupId | ValueA | ValueB |
|---------|--------|--------|
| 0 | 10 | 100 |
| 1 | 70 | 1200 |
| 2 | 120 | 700 |

最佳答案

list.GroupBy(i => i.GroupId)
.Select(g => new { GroupId = g.Key,
ValueA = g.Sum(i => i.ValueA),
ValueB = g.Sum(i => i.ValueB)});

或者只是为了好玩,您可以使用其重载在一次 GroupBy 调用中完成:

list.GroupBy(i => i.GroupId,
(key, groupedItems) => new {
GroupId = key,
ValueA = groupedItems.Sum(i => i.ValueA),
ValueB = groupedItems.Sum(i => i.ValueB),
});

或者您可以使用 Aggregate 来避免多次迭代每个组:

list.GroupBy(i => i.GroupId)
.Select(g => g.Aggregate((i1, i2) => new Foo{ GroupId = i1.GroupId,
ValueA = i1.ValueA + i2.ValueA,
ValueB = i1.ValueB + i2.ValueB,
}));

关于c# - 如何使用 LINQ 按组合并/求和记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9742402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com