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

