Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c LINQ从运行时信息创建匿名类型_C#_Linq - Fatal编程技术网

C# c LINQ从运行时信息创建匿名类型

C# c LINQ从运行时信息创建匿名类型,c#,linq,C#,Linq,假设我有一个在运行时填充的列名列表。如何使用LINQ表达式在分组查询中为每个列名创建平均值,例如: var result = from data in view.AsEnumerable() group data by new {Group = data.Field<string>("group_no")} into grp select ne

假设我有一个在运行时填充的列名列表。如何使用LINQ表达式在分组查询中为每个列名创建平均值,例如:

        var result = from data in view.AsEnumerable()
                     group data by new {Group = data.Field<string>("group_no")}
                     into grp
                     select new
                     {
                         Group = grp.Key.Group,


                         //Add anonymous values for eachcolumn average
                     };
据我所知,你不能在匿名范围内枚举吗

有办法做到这一点吗

谢谢。

你不能

相反,您可以制作字典:

Averages = table.Columns.Cast<DataColumn>().ToDictionary(
    c => c.ColumnName, 
    c => grp.Average(dr => Convert.ToDouble(dr[c]))
)
需要Convert.ToDouble,因为我不知道coulmn是什么类型,Average需要一个特定的数字类型。
如果所有列都是相同的数字类型,则可以使用强制转换替换该类型。

匿名类型是在编译时创建的。无法根据运行时信息创建一个。此外,匿名类型具有方法作用域,这意味着您无法返回它们并在其他地方使用它们


根据您要做的事情,顺便说一句,您可以查看动态类型。从ExpandooObject开始。或者,在运行时生成编译类型可能有意义。看看例如TypeBuilder。

那没有意义;你不能对这个物体做任何事情。你想做什么?谢谢你的主意,但这行不通,因为有些列是字符串。我只想要datatable中选定数量列的平均值。但是,这些列只有在运行时才知道。@Darren:错;Convert.ToDouble将解析字符串。对不起,我应该更清楚-我知道它将解析字符串,但是字符串包含字母。然后您可以调用自己的解析器,或者添加Where子句以过滤掉这些列。