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

如何在LINQ中对DataTable使用GroupBy实现指定聚合操作?

解决DataTable分组后去重计数错误的问题

首先看你的问题:你要按Column3和Column4分组,计算Column1的总和、Column2的去重计数,但当前代码里的g.Distinct().Count()是统计分组内唯一DataRow的数量,而不是Column2字段的去重值数量,这就是结果错误的根源。

修正后的代码实现

var queryDGroup = dtsecscaleditemsCloned2.AsEnumerable()
    .GroupBy(r => new { Column3 = r["Column3"], Column4 = r["Column4"] });

foreach (var g in queryDGroup)
{
    DataRow addedRow = dtsecscaleditemsCloned.Rows.Add();
    // 计算Column1的总和(根据实际数据类型调整转换,比如int/decimal等)
    addedRow["Column1"] = g.Sum(r => Convert.ToDecimal(r["Column1"]));
    // 计算Column2的去重计数:先提取Column2的值,再去重统计
    addedRow["Column2"] = g.Select(r => r["Column2"]).Distinct().Count();
    // 赋值分组的Column3和Column4值
    addedRow["Column3"] = g.Key.Column3;
    addedRow["Column4"] = g.Key.Column4;
}

关键说明

  • Column1总和:使用Sum()方法时,要将DataRow中的值转换为对应的数值类型(比如decimal适合高精度数值,int适合整数),避免类型转换异常。
  • Column2去重计数:先通过Select(r => r["Column2"])提取分组内所有Column2的值,再用Distinct()去重,最后用Count()统计数量,这才是你需要的“Column2的去重计数”逻辑。
  • 分组键优化:分组时将匿名类的属性名和字段名保持一致(比如Column3 = r["Column3"]),后续读取g.Key.Column3会更直观,减少混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:54:35