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
您能不能避免使用扩展方法而改用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))
};
当然,你会遇到装箱/拆箱,但考虑到你如何处理动态输出,我认为这是随之而来的。