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

如何在C# DataTable中对相同价格行的Size值求和并新增行展示

在C#中使用DataTable实现同价行Size求和并插入汇总行

实现思路

  • 按Price字段分组,计算每组对应的Size总和
  • 遍历原数据,在每组数据的开头插入汇总行,展示对应价格的Size求和结果
  • 生成包含汇总行的新DataTable,保留原表结构与数据

完整代码示例

using System;
using System.Data;
using System.Linq;

class Program
{
    static void Main()
    {
        // 构造测试DataTable(可替换为你的业务数据)
        DataTable originalTable = new DataTable();
        originalTable.Columns.Add("Price", typeof(decimal));
        originalTable.Columns.Add("Size", typeof(int));
        originalTable.Columns.Add("OtherField", typeof(string)); // 示例其他业务字段

        // 添加测试数据
        originalTable.Rows.Add(10.5m, 2, "Item1");
        originalTable.Rows.Add(10.5m, 3, "Item2");
        originalTable.Rows.Add(20.0m, 5, "Item3");
        originalTable.Rows.Add(20.0m, 4, "Item4");
        originalTable.Rows.Add(15.8m, 1, "Item5");

        // 按Price分组,计算每组Size总和
        var priceSumDict = originalTable.AsEnumerable()
            .GroupBy(row => row.Field<decimal>("Price"))
            .ToDictionary(group => group.Key, group => group.Sum(row => row.Field<int>("Size")));

        // 克隆原表结构,创建结果表
        DataTable resultTable = originalTable.Clone();

        // 遍历分组,先插入汇总行,再插入对应价格的原始行
        foreach (var group in priceSumDict.OrderBy(g => g.Key)) // 按Price排序,按需开启
        {
            // 创建并添加汇总行
            DataRow sumRow = resultTable.NewRow();
            sumRow["Price"] = group.Key;
            sumRow["Size"] = group.Value;
            sumRow["OtherField"] = "汇总"; // 标识汇总行的字段值
            resultTable.Rows.Add(sumRow);

            // 添加当前价格下的所有原始行
            var targetRows = originalTable.AsEnumerable()
                .Where(row => row.Field<decimal>("Price") == group.Key);
            foreach (var row in targetRows)
            {
                resultTable.Rows.Add(row.ItemArray);
            }
        }

        // 验证输出(可替换为业务逻辑处理)
        foreach (DataRow row in resultTable.Rows)
        {
            Console.WriteLine($"Price: {row["Price"]}, Size: {row["Size"]}, Field: {row["OtherField"]}");
        }
    }
}

关键说明

  • 分组计算:借助LINQ的GroupBy和Sum方法快速完成同价行的Size求和,避免手动遍历统计
  • 结构复用:通过Clone()方法复制原表结构,无需手动定义列,适配原表的字段变化
  • 行顺序控制:先插入汇总行再插入原始行,确保汇总行显示在对应价格行的上方;若需要按价格排序,保留OrderBy即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:00:58