You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按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; }
    }
}

关键说明

  1. 分组键的使用:分组后的res.Key就是我们分组依据的WidgetName,不需要用res.First().WidgetName,前者更高效且语义更明确。
  2. 求和操作:通过res.Sum(item => item.Quantity)对当前分组内所有Widget的Quantity字段求和,得到该分组的总数量。
  3. 输出结果:运行代码后会打印出你需要的格式:
    WidgetA - 8
    WidgetB - 6
    WidgetC - 6
    WidgetD - 6
    

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:42:53