Linq to DataTable (GROUP BY) 当列未知时

本文关键字:未知 BY to DataTable GROUP Linq | 更新日期: 2023-09-27 18:33:14

我需要使用 LINQ 针对数据表创建动态报告。在用户指定给定的复杂查询之前,数据表的内容是未知的。如果字段已知,则以下 LINQ 查询将起作用:

var groups = results.AsEnumerable();
var groupList = from g in groups
              group g by g.Field<string>(column) into Grup
                    select new { 
                          GroupedBy = Grup.Key, 
                          CountValue = Grup.Count(r=>r.Field)<int>(countColumn))
                     };

但是,由于我不知道字段类型,当列为整数类型(或不同于字符串)时,代码将在以下位置失败:

              group g by g.Field<string>(column) into Grup

因为它无法将 int 转换为字符串。错误如下:

无法将类型为"System.Int32"的对象强制转换为类型"System.String"

关于如何解决此问题的任何建议?我试图使用以下方法确定列的数据类型:

results.Columns[column].DataType

然后使用数据类型进行转换,但这显然不起作用。类似于这样的东西:

group g by g.Field<results.Columns[column].DataType>(column) into Grup

Linq to DataTable (GROUP BY) 当列未知时

您能不能避免使用扩展方法而改用Item

喜欢:

var groups = results.AsEnumerable();
var groupList = from g in groups
          group g by g.Item[column] into Grup
                select new { 
                      GroupedBy = Grupi.Key, 
                      CountValue = Grupi.Countr=>r.Field<int>(countColumn))
                 };
当然,你

会遇到装箱/拆箱,但考虑到你如何处理动态输出,我认为这是随之而来的。