我有一个时间间隔列表,间隔为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。
逻辑如何?