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

如何用C# LINQ对DataTable实现Group By且Count>1的查询?

实现DataTable分组统计(筛选重复组)的C#代码

你可以通过LINQ to DataSet实现对应的SQL逻辑,以下是具体代码:

核心实现(LINQ查询)

using System.Linq;
using System.Data;

// 假设你的源DataTable为myTable
var duplicateGroups = myTable.AsEnumerable()
    // 按C1、C2、C3字段分组
    .GroupBy(row => new 
    {
        C1 = row["C1"],
        C2 = row["C2"],
        C3 = row["C3"]
    })
    // 筛选出分组计数大于1的项
    .Where(group => group.Count() > 1)
    // 提取分组键和计数
    .Select(group => new 
    {
        C1 = group.Key.C1,
        C2 = group.Key.C2,
        C3 = group.Key.C3,
        Count = group.Count()
    });

转换为DataTable(可选)

如果需要将结果转换为新的DataTable以便后续使用:

DataTable resultTable = new DataTable();
// 复制源表对应列的类型
resultTable.Columns.Add("C1", myTable.Columns["C1"].DataType);
resultTable.Columns.Add("C2", myTable.Columns["C2"].DataType);
resultTable.Columns.Add("C3", myTable.Columns["C3"].DataType);
resultTable.Columns.Add("Count", typeof(int));

// 填充结果表
foreach (var item in duplicateGroups)
{
    resultTable.Rows.Add(item.C1, item.C2, item.C3, item.Count);
}

注意事项

  • 需确保项目引用System.Data.DataSetExtensions程序集(.NET Framework默认包含,.NET Core/.NET 5+无需额外引用)
  • 如果字段可能为DBNull,分组时可添加空值处理,例如C1 = row["C1"] ?? DBNull.Value
  • 若源表列名或类型与示例不符,需对应调整代码中的字段名和类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:00:03