如何用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
相关产品推荐
相关产品推荐

