No applicable method 'Select' exists in type 'DataRow'

天涯浪子 提交于 2020-06-29 03:32:13

问题


I have a data table result and I converted it to Enumerable using AsEnumerable extension.

var dataTableToEnumerable = dataTable.AsEnumerable();

Now Im doing a groupBy on it using Linq Dynamic Extensions and it works fine but I cant process Select(),Sum(),Min() etc on the aggregrated result.

But methods like Count(),First(),FirstOrDefault() exist.

dataTableToEnumerable.AsQueryable().Where("(it[\"yoko\"] != null&&it[\"price\"] != null)")
.GroupBy("new(it[\"proposalid\"] as proposalid,it[\"yoko\"] as yoko)", "it").Select("it.Sum(\"price\")").

Also with reference to this question I changed my query to this:-

(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\")").

But Now its showing No Method Select exist on IEnumerable<IGrouping<DynamicClass,DataRow>>

Its giving the error No applicable method 'Select' exists in type 'DataRow', Can Any one help on this?


回答1:


You can extract the price column using the DataRow string indexer method as an object and then convert from Dynamic LINQ to LINQ to Objects using AsEnumerable, which gets you IEnumerable<object> which you can then cast to the appropriate type:

var ans = dataTableToEnumerable.AsQueryable().Where("(it[\"yoko\"] != null && it[\"price\"] != null)")
            .GroupBy("new(it[\"proposalid\"] as proposalid,it[\"yoko\"] as yoko)", "it")
            .Select("it.Select(it[\"price\"])")
            .AsEnumerable()
            .Select(pg => (((IEnumerable<object>)pg).Sum(p => (double)p)));

If you don't need any other fields from the GroupBy, you can just group the price column:

var ans = dataTableToEnumerable.AsQueryable().Where("(it[\"yoko\"] != null && it[\"price\"] != null)")
            .GroupBy("new(it[\"proposalid\"] as proposalid,it[\"yoko\"] as yoko)", "it[\"price\"]")
            .AsEnumerable()
            .Select(pg => (((IEnumerable<object>)pg).Sum(p => (double)p)));


来源:https://stackoverflow.com/questions/62573553/no-applicable-method-select-exists-in-type-datarow

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!