我有一个数据表结果,我使用 AsEnumerable 扩展将其转换为 Enumerable。
var dataTableToEnumerable = dataTable.AsEnumerable();
现在我使用 Linq 动态扩展对其进行了 groupBy,它工作正常,但我无法对聚合结果进行处理Select()
,Sum()
等等Min()
。
但是存在诸如 Count(),First(),FirstOrDefault() 之类的方法。
dataTableToEnumerable.AsQueryable().Where("(it[\"yoko\"] != null&&it[\"price\"] != null)")
.GroupBy("new(it[\"proposalid\"] as proposalid,it[\"yoko\"] as yoko)", "it").Select("it.Sum(\"price\")").
同样参考这个问题,我将查询更改为:-
(dataTableToEnumerable.AsQueryable().Where("(it[\"yoko\"] != null&&it[\"price\"] != null)")
.GroupBy("new(it[\"proposalid\"] as proposalid,it[\"yoko\"] as yoko)", "it") as IEnumerable<IGrouping<DynamicClass,DataRow>>).Select("it.Sum(\"price\")").
但现在它的表现No Method Select exist on IEnumerable<IGrouping<DynamicClass,DataRow>>
它给出了错误No applicable method 'Select' exists in type 'DataRow'
,有人可以帮忙吗?
#更新1
我已经尝试过第一个答案。它工作正常,但是在 groupby 之后有多个字段选择,我该如何更改它?这是我的查询:-
dataTableToEnumerable.AsQueryable().Where("(it[\"yoko\"] != null && it[\"price\"] != null)") .GroupBy("new(it[\"proposalid\"] as proposalid,it[\"yoko\"] as yoko)", "it") .Select("new(it.Select(it[\"price\"] as price,it[\"cost\"] as cost)")
结果集是正确的,但是,
.AsEnumerable() .Select(pg => (((IEnumerable<object>)pg).Sum(p => (double)p)));
这导致错误
无法将“<>f__AnonymousType15`2[System.Object,System.Object]”类型的对象转换为“System.IConvertible”类型。