2014-01-22 231 views
-1

我有一個數據集,每5分鐘有一個值。現在我通過LINQ查詢獲得了這個組,我將這些數據分組在小時隙中。如何從此分組數據中獲取正確的日期?

我想要得到正確的Timestamp爲每個小時,我在這裏使用n.First().Timestamp,但從我的結果看來它錯了。在有數年數據的數據集上,我只得到24分。

Node看起來是這樣的:

public class Node 
{ 
    public DateTime Timestamp; 
    public double Value; 
    public string NodeName; 
} 

可有人告訴我怎樣可以得到每小時分組數據的正確Timestamp?因此,我沒有Timestamp1/01/2014 14:05:00,1/01/2014 14:10:00,我只需要每小時分組1/01/2014 14:00:00,1/01/2014 15:00:00

hourlynodes = (from node in nodedata group node by node.Timestamp.Hour into n select new Node 
{ Timestamp = new DateTime(n.First().Timestamp.Year, // How do I get the right Year/Month/Day for each grouped hour??? 
    n.First().Timestamp.Month, 
    n.First().Timestamp.Day, 
    n.Key, 0, 0), // n.Key here is the hour grouping 
    Value = n.Average(x => x.Value), 
    NodeName = n.First().NodeName 
} 
).OrderBy(x => x.Timestamp.Date); 
+0

Node類的外觀如何?什麼時間戳回到小時意味着什麼? –

+0

你得到24分的原因是因爲你按小時分組,不包括日,月,年...... –

+0

請提供一些你想要的樣本數據表和結果。日期和節點名稱是否重要尚不清楚 –

回答

1

您需要選擇到最接近的小時,而不是僅僅使用小時爲基礎。所以你需要一個擴展方法:

public static DateTime ToNearestHour(this DateTime dt) 
{ 
    return dt.Date.AddHours(dt.Hours); 
} 

然後它就像稍微修改組一樣簡單。

hourlynodes = (from node in nodedata group node by node.Timestamp.ToNearestHour() into n select new Node 
{ Timestamp = new DateTime(n.First().Timestamp.Year, // How do I get the right Year/Month/Day for each grouped hour??? 
    n.First().Timestamp.Month, 
    n.First().Timestamp.Day, 
    n.Key, 0, 0), // n.Key here is the hour grouping 
    Value = n.Average(x => x.Value), 
    NodeName = n.First().NodeName 
} 
).OrderBy(x => x.Timestamp.Date); 
相關問題