C# 列未知时Linq到数据表(分组依据)

C# 列未知时Linq到数据表(分组依据),c#,linq,casting,datatable,C#,Linq,Casting,Datatable,我需要针对数据表使用LINQ创建动态报告。在用户指定给定的复杂查询之前,数据表的内容是未知的。如果字段已知,则以下LINQ查询将起作用: var groups = results.AsEnumerable(); var groupList = from g in groups group g by g.Field<string>(column) into Grup select new {

我需要针对数据表使用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<results.Columns[column].DataType>(column) into Grup
按g字段(列)将g分组到Grup中

您是否可以避免使用扩展方法,而是使用

比如:

var groups=results.AsEnumerable();
var groupList=来自分组中的g
按g.Item[列]将g分组到Grup中
选择新{
GroupedBy=Grupi.Key,
CountValue=Grupi.Countr=>r.Field(countColumn))
};

当然,您会遇到装箱/取消装箱,但是考虑到您处理动态输出的方式,我认为这是一个问题。

在您的选择中使用Grup而不是Grupi。Grup/Grupi只是一个输入错误,因为我在这里将代码缩短了很多。我现在就编辑它。问题仍然存在。请注意,我正在尝试这种方法,但我得到了以下结果:“'System.Data.DataRow'不包含'Item'的定义,并且没有扩展方法'Item'接受'System.Data.DataRow'类型的第一个参数”我猜缺少尊重!?是的,也许吧。以下是msdn参考:。但奇怪的是,如果您使用的是数据集扩展,那么您应该使用System.Data。确保您有System.Data的using子句。。。
results.Columns[column].DataType
group g by g.Field<results.Columns[column].DataType>(column) into Grup
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))
                 };