我有一个数据集,其数据每5分钟就有一个值。现在我通过LINQ查询得到了这个组,我在每小时的时间段中对这些数据进行分组。
我希望每小时都能获得正确的Timestamp
,我在这里使用了n.First().Timestamp
,但从我的结果来看,这似乎是错误的。在具有几年数据的数据集上,我只得到24点。
Node
看起来像这样:
public class Node
{
public DateTime Timestamp;
public double Value;
public string NodeName;
}
有人能告诉我如何获得每小时分组数据的正确Timestamp
吗?因此,我不会像Timestamp
1/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 :(得分: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);