【问题标题】:GroupBy and average a column in LinqGroupBy并平均Linq中的一列
【发布时间】:2017-02-08 23:03:55
【问题描述】:

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

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; }
}

【问题讨论】:

    标签: c# linq group-by


    【解决方案1】:

    也许这会起作用?

    var data = (from ent in db.T060_DATA.AsEnumerable()
                where ent.id_indicador == id
                group ent by new { ent.data, ent.hora } into g
                select new ChartData { data_hora = g.Key.data+" - "+g.Key.hora, Valor = g.Average(o => double.Parse(o.valor))}).ToList();
    

    此外,我认为您应该在 ChartData 中为 data_hora 属性使用 DateTime 而不是字符串。

    编辑
    LINQ to Entities 不适用于 double.Parse 因此最简单的解决方案是在第一行添加 db.T060_DATA.AsEnumerable() 并在内存中进行所有计算,有关更多信息,请参阅其他问题1@987654322 @3.

    【讨论】:

    • 无法在 linq 中将字符串解析为 double 为什么?我该如何解决这个问题?
    • LINQ to Entities 无法识别方法 'Double ToDouble(System.String)' 方法,并且此方法无法转换为存储表达式。
    • 你能用 Convert.ToDouble 代替 double.parse 吗?
    • 也许尝试将“db.T060_DATA.AsEnumerable()”放在第一行?
    猜你喜欢
    • 2019-10-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2020-05-08
    相关资源
    最近更新 更多