如何从这个分组数据中获取正确的日期?

时间:2014-01-22 07:26:33

标签: c# linq select group-by

我有一个数据集,其数据每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:001/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);

1 个答案:

答案 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);