GroupBy并在Linq中平均一列

时间:2016-09-30 11:19:35

标签: c# linq group-by

我有关于下表的这段代码:

Date          Hour    Value (string)
2016-01-01    00:00   10
2016-01-01    00:00   12
2016-01-01    00:00   11
2016-01-01    00:01   10
2016-01-01    00:01   10
2016-01-01    00:01   12

我想按日期和小时对此进行分组,并将其平均值(将其转换为双倍)。

我尝试了几种解决方案,但是在得到这样的结果时没有成功:

Date-Hour            Value (string)
2016-01-01 - 00:00   11
2016-01-01 - 00:01   10,6

我已经尝试了下面的linq查询来获取它:

...
var data = (from ent in db.T060_DATA
            where ent.id_indicador == id
            group ent by new { ent.data, ent.hora } into g
            select new { g.Key, List = g.ToList(), Valor = g.Average(val => double.Parse(val.valor)) }).ToList();

我希望此结果填满List<ChartData>

public class ChartData
{
    public string data_hora { get; set; }
    public double valor { get; set; }
}

1 个答案:

答案 0 :(得分:1)

也许这会奏效吗?

Aff

此外,我认为你应该使用DateTime而不是字符串来表示ChartData中的data_hora属性。

修改
LINQ to Entities不能与double.Parse一起使用,所以最简单的解决方案是在第一行添加db.T060_DATA.AsEnumerable()并在内存中进行所有计算,有关详细信息,请参阅其他问题1 2 3