将15分钟时隙聚合到30分钟时隙

时间:2014-04-14 19:04:20

标签: asp.net-mvc linq datetime aggregate

我有一个时间间隔列表,间隔为15分钟。 每个插槽都可以绑定一个活动,使插槽“保留”。

以30分钟为一组返回广告位的最佳方法是什么。

基本上,我怎么能这样做:

10:00

10:15 = 这是一个保留的插槽

10:30

对此:

10:00

10:30

然后保留整个插槽,因为它包含保留的10:15插槽。

不改变插槽尺寸本身。

这可以在linq查询本身内完成,还是我必须返回15分钟的插槽集合并在之后应用30分钟的逻辑?

请指出正确的方向,谢谢!

插槽是具有以下属性和类型的对象:

TimeslotId (int)
SlotStart (DateTime)
ActivityId (int)

更新

好的,我尝试使用此查询对插槽进行分组。

        var groups = service.TestGrouping().GroupBy(x =>
        {
            var stamp = x.SlotStart;
            stamp = stamp.AddMinutes(-(stamp.Minute % 30));
            stamp = stamp.AddMilliseconds(-stamp.Millisecond - 1000 * stamp.Second);
            return stamp;
        }).Select(g => new Sample() { GroupTime = g.Key, GroupedSlots = g.ToList() }).ToList();       

这让我更近了一点。现在我将时段汇总到最接近的30分钟,如8:00-8:30,8:30-9:00。

但是,这不适用于过去四分之一到四分之一的广告位。我需要一些逻辑来捕捉所有可能的半小时:

8:00-8:30,8:15-8:45,8:30-9:00,8:45-9:15。

逻辑如何?

0 个答案:

没有答案