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

如何在C#中将DataTable按Category拆分为多个DataTable

按Category字段拆分DataTable为多个独立表的解决方案

没问题,这事儿很容易搞定!核心思路就是先提取所有唯一的Category值,再针对每个值筛选原表的行,复制到新的DataTable里。直接上实用的代码方案:

代码示例(C#)

假设你的原始DataTable名为originalTable,下面是完整的实现代码:

using System.Data;
using System.Linq;

// 第一步:获取所有不重复的Category值
var distinctCategories = originalTable.AsEnumerable()
                                      .Select(row => row.Field<int>("Category"))
                                      .Distinct()
                                      .ToList();

// 第二步:遍历每个Category,创建对应的独立DataTable
List<DataTable> groupedTables = new List<DataTable>();

foreach (var category in distinctCategories)
{
    // 复制原表的结构(保留列名、数据类型等所有属性)
    DataTable newTable = originalTable.Clone();
    
    // 筛选出当前Category对应的所有行
    var filteredRows = originalTable.AsEnumerable()
                                    .Where(row => row.Field<int>("Category") == category);
    
    // 把筛选后的行批量加载到新表中
    newTable.Load(filteredRows);
    
    // 将新表加入列表,后续可以按索引取出对应分组(比如groupedTables[0]就是Category=2的男性数据表)
    groupedTables.Add(newTable);
}

关键细节说明

  • originalTable.Clone():只复制表结构不复制数据,保证新表和原表的列完全一致;
  • AsEnumerable():把DataTable转换成可枚举的行集合,方便用Linq做筛选;
  • Load(filteredRows):批量添加行,比逐行Add效率更高。

如果你的Category字段是字符串类型,只需要把代码里的int改成string就行,比如row.Field<string>("Category")。

运行这段代码后,groupedTables里的每个元素就是你想要的独立DataTable,和你给出的示例结果完全匹配~

内容的提问来源于stack exchange,提问作者Sainath Kamodula AppSc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:59:28