2014-01-22 180 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); 
相关问题