首页 > 解决方案 > 按列对 DataTable 进行分组并转换为 List

问题描述

我有一个如下所示的 DataTable:

Category | Amount
Food     | 10
Drink    | 20
Clothes  | 50
Drink    | 30
Food     | 40
Clothes  | 5

我想按Category列对其进行分组,并将每个类似的分组转换为DataTable并将其放在List中。所以我需要有3 个数据表,如下所示:

数据表1

Category | Amount
Food     | 10
Food     | 40

数据表2

Category | Amount
Drink    | 20
Drink    | 30

数据表3

Category | Amount
Clothes  | 50
Clothes  | 5

关于如何实现上述目标的任何建议?我只能找到想要输出 1 个 DataTable 的问题。

标签: c#linqdatatable

解决方案


您可以通过这种方式使用 Linq to objects(和 Linq to Dataset)

List<DataTable> tablesByCategory = 
    table.AsEnumerable().
          GroupBy(r => r.Field<double>("Category")).
          Select(g => 
          {
              DataTable dt = table.Clone();

              foreach (DataRow r in g)
              {
                  dt.ImportRow(r);
              }

              return dt;
          }).ToList();

推荐阅读