gpt4 book ai didi

c# - 在 Linq 中获取一个值的总和

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:26 25 4
gpt4 key购买 nike

给定以下结构...

class Foo {

public string Category { get; set; }
public string Code { get; set; }
public int Quantity { get; set; }

}

我正在尝试使用 Linq 按类别和代码汇总这些对象的列表,这样如果我提供以下来源...

List<Foo> foos = new List<Foo>() {
new Foo {Category = @"A", Code = @"B", Quantity = 1},
new Foo {Category = @"A", Code = @"B", Quantity = 2},
new Foo {Category = @"C", Code = @"D", Quantity = 3},
new Foo {Category = @"C", Code = @"D", Quantity = 4}
};

我最终得到一个包含...的列表

  Foo {Category = @"A", Code = @"B", Quantity = 3},
Foo {Category = @"C", Code = @"D", Quantity = 7}

(其中数量是匹配对象的原始数量之和)。

我知道我需要结合使用 group by 子句和 Sum() 扩展方法,但我似乎无法找到正确的方法组合。

请注意,这个列表背后没有数据库,我纯粹是用对象来做这件事,所以提取包括总和在内的原始列表不是一个选项。

谢谢。

最佳答案

您想要同时按类别和代码进行分组,因此您需要一个匿名类型 - 然后只需对数量求和即可。如果您使用 right overload,您可以在对 GroupBy 的单个调用中完成此操作:

var query = list.GroupBy(
item => new { item.Category, item.Code },
(key, group) => new Foo { Category = key.Category,
Code = key.Code,
Quantity = group.Sum(x => x.Quantity) });

如果你想用查询表达式来做到这一点,你可以使用:

var query = from item in list
group item by new { item.Category. item.Code } into items
select new Foo { Category = items.Key.Category,
Code = items.Key.Code,
Quantity = items.Sum(x => x.Quantity) });

关于c# - 在 Linq 中获取一个值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803256/

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