2016-09-30 103 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