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

如何通过LINQ关联双列表并按卡片名称分组统计总数量?

按卡片名称分组统计总数量的解决方案

你的代码已经完成了两个列表的关联和初步投影,但缺少对分组后数量的聚合计算,导致只得到了分组的键,没有统计总数量。以下是两种修正方案:

方案一:直接分组聚合(更简洁高效)

在关联后直接按卡片名称分组,同时聚合数量总和,省去中间投影步骤:

var values = from r in records
             join c in cards on r.CardGUID equals c.GUID
             group r.Quantity by c.Name into grouped
             orderby grouped.Key ascending
             select new
             {
                 Name = grouped.Key,
                 TotalQuantity = grouped.Sum()
             };

方案二:基于原代码修改

如果想保留先投影再分组的逻辑,只需在GroupBy后添加Select来计算每组的数量总和:

var values = (from r in records
              join c in cards on r.CardGUID equals c.GUID
              select new
              {
                  Name = c.Name,
                  Quantity = r.Quantity
              })
              .GroupBy(item => item.Name)
              .Select(group => new
              {
                  Name = group.Key,
                  TotalQuantity = group.Sum(item => item.Quantity)
              })
              .OrderBy(result => result.Name);

关键说明

  • GroupBy的作用是将数据按指定键(这里是卡片名称)分组,返回的分组对象包含Key(分组键)和可枚举的分组元素。
  • 必须通过Sum()方法对每组内的Quantity进行求和,才能得到相同名称卡片的总数量。
  • 排序操作放在聚合之后更合理,避免对未聚合的大量数据排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:50:32