2016-09-30 77 views
0

我有这样一段代码关于以下表格:的GroupBy和平均一列中的LINQ

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

也许这是否行得通呢?

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(); 

而且我认为你应该使用的DateTime,而不是字符串在ChartData data_hora财产。

编辑
LINQ到实体不double.Parse工作,所以最简单的解决办法是在第一线添加db.T060_DATA.AsEnumerable()和做所有的计算在内存中,更多信息请请参阅此其他问题123

+0

无法解析字符串以在LINQ内部加倍为什么?我该如何解决这个问题? – PTLearner

+0

你能复制确切的错误吗? – YuvShap

+0

LINQ to Entities无法识别方法'Double ToDouble(System.String)'方法,并且此方法无法转换为商店表达式。 – PTLearner