C#GroupBy 30分钟间隔返回错误结果

时间:2018-03-05 17:24:04

标签: c#

我正在使用Highcharts来提供信息的可视化显示。截至目前,我按小时对所有数据库表记录进行分组:

var lstGroupSummariesByHour =
    lstAllSummaries.Where(x => x.DateTimeProperty.Year == year && !x.deleted)
        .GroupBy(x => x.DateTimeProperty.Hour)
        .Select(x => new object[] {x.Count()}).ToArray();

这是我的折线图中的一行..但我希望创建一个新行,其中显示每半小时的所有摘要。是否有简单的LINQ lambda方法来实现这一目标?

根据this question,如果我想要30分钟的间隔,我的代码会看起来像这样,因为在第二个答案中他将分钟除以12得到5分钟的间隔?

var lstGroupSummariesByHalfHour =
    lstAllSummaries.Where(x => x.DateTimeProperty.Year == year && !x.deleted)
        .GroupBy(
            x =>
                new DateTime(x.DateTimeProperty.Year, x.DateTimeProperty.Month, x.DateTimeProperty.Day, x.DateTimeProperty.Hour,
                    x.DateTimeProperty.Minute / 2, 0))
        .Select(x => new object[] {x.Count()}).ToArray();

这是在3500条记录下返回的,这导致了X轴上没有足够刻度的Highcharts错误..这是0到24(基于小时)..所以它不应该返回48因为有一天48小时? 24 * 2(仍然会返回highcharts错误,但我稍后会处理)?

如何修复上述代码以获取每半小时的结果?

更新

我正在寻找(例如),0100和...之间有多少摘要。 0130,0131 - 0200,0201 - 0230 ..依此类推。

以下是我的图表目前的情况:

enter image description here

我想得到每个数字(小时)之间的勾号摘要数... 0030 .. 0130 .. 0230 ..

我的图表目前基于全年...所以全年...'x'在0小时内的摘要数...'y'在1小时内的摘要数...等等等等..所以我正在寻找在0000 - 0030,0031-0100,0101 - 0130之间发生的全年总摘要数等等。等等。

1 个答案:

答案 0 :(得分:1)

您需要将分钟量化为0或30

new DateTime(
  x.DateTimeProperty.Year, 
  x.DateTimeProperty.Month, 
  x.DateTimeProperty.Day, 
  x.DateTimeProperty.Hour, 
  x.DateTimeProperty.Minute > 30 ? 30 : 0,
  0));