如何按Widget分组统计各分组的Quantity总和?
按Widget名称分组统计Quantity总和的实现方法
你的现有代码已经完成了分组操作,但没有计算每个分组的Quantity总和,只提取了Widget名称。只需要修改查询的select部分,通过聚合函数Sum来计算每组的数量总和即可。
修改后的完整代码
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { List<Widget> list = new(); list.Add(new Widget() { WidgetName = "WidgetA", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetB", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetC", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetD", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetA", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetB", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetC", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetD", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetA", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetB", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetC", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetD", Quantity = 2 }); list.Add(new Widget() { WidgetName = "WidgetA", Quantity = 2 }); // LINQ查询表达式写法 var queryResult = (from x in list group x by x.WidgetName into res select new Widget { WidgetName = res.Key, // 直接用分组键,比First()更高效 Quantity = res.Sum(item => item.Quantity) }).ToList(); // 或者用方法语法,更简洁 // var queryResult = list.GroupBy(x => x.WidgetName) // .Select(g => new Widget // { // WidgetName = g.Key, // Quantity = g.Sum(item => item.Quantity) // }) // .ToList(); // 打印预期结果 foreach (var item in queryResult) { Console.WriteLine($"{item.WidgetName} - {item.Quantity}"); } } } class Widget { public string WidgetName { get; set; } = ""; public int Quantity { get; set; } } }
关键说明
- 分组键的使用:分组后的
res.Key就是我们分组依据的WidgetName,不需要用res.First().WidgetName,前者更高效且语义更明确。 - 求和操作:通过
res.Sum(item => item.Quantity)对当前分组内所有Widget的Quantity字段求和,得到该分组的总数量。 - 输出结果:运行代码后会打印出你需要的格式:
WidgetA - 8 WidgetB - 6 WidgetC - 6 WidgetD - 6
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

