假设我有一个在运行时填充的columnNames列表。我如何使用LINQ表达式为每个columnNames创建平均值,在按查询分组中,如:
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
};
据我所知,你无法在匿名范围内进行枚举?
有办法做到这一点吗?
感谢。
答案 0 :(得分:2)
你不能。
相反,你可以制作一本字典:
Averages = table.Columns.Cast<DataColumn>().ToDictionary(
c => c.ColumnName,
c => grp.Average(dr => Convert.ToDouble(dr[c]))
)
Convert.ToDouble
是必需的,因为我不知道coulmn是什么类型,Average
需要特定的数字类型。
如果所有列都是相同的数字类型,则可以使用强制转换替换它。
答案 1 :(得分:0)
匿名类型是在编译时创建的。您无法从运行时信息中创建一个。此外,匿名类型具有方法范围,这意味着您无法返回它们并在其他地方使用它们。
根据您要做的事情(顺便说一下,您打算做什么?),您可能会看到动态类型。从(例如)ExpandoObject开始。或者,在运行时生成编译类型可能有意义。查看(例如)TypeBuilder。