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

如何基于多列相同值对DataTable执行GroupBy分组并生成结果表?

多列分组实现DataTable分组的正确方法

问题根源

  • 空值错误:直接对DataRow列值调用ToString().Trim()时,若列值为DBNull会抛出异常
  • 返回原表:代码最后用SelectMany将所有分组的行重新合并,等于取消了分组效果

解决代码与步骤

1. 带空值处理的分组逻辑

先处理空值避免异常,再按三列组合值分组:

' 按三列组合分组,兼容空值
Dim groupedRows = in_dt_WPSFileInput.AsEnumerable().GroupBy(Function(r) New With {
    Key .MedicareNo = If(r.IsNull("PatientMedicareNumber"), "", r("PatientMedicareNumber").ToString().Trim()),
    Key .ServiceStart = If(r.IsNull("DateofServiceStart"), "", r("DateofServiceStart").ToString().Trim()),
    Key .ServiceEnd = If(r.IsNull("DateofServiceEnd"), "", r("DateofServiceEnd").ToString().Trim())
})

2. 生成多个分组后的DataTable

遍历每个分组,克隆原表结构并导入分组行:

' 存储所有分组后的DataTable
Dim resultTables As New List(Of DataTable)()

For Each group In groupedRows
    ' 复制原表的结构(不含数据)
    Dim newTable = in_dt_WPSFileInput.Clone()
    ' 将当前分组的行导入新表
    group.CopyToDataTable(newTable, LoadOption.Upsert)
    resultTables.Add(newTable)
Next

代码说明

  • IsNull方法判断列值是否为DBNull,空值时用空字符串替代,避免转换异常
  • 匿名类型的Key关键字确保分组逻辑按三个字段的组合值执行
  • 每个分组单独克隆原表结构,保证新表和原表字段完全一致
  • 不使用SelectMany,保留每个分组的独立性,最终resultTables会包含7个分组后的DataTable

内容的提问来源于stack exchange,提问作者Arun Singh G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:05:11