在几小时之间查询DateTime对象的列表

时间:2014-06-05 12:26:31

标签: c# datetime

我有一个DateTime对象列表,这个对象有一个StarteDate和一个EndDate。不,我想获得StartHour和EndHour中出现的所有项目。

到目前为止我的代码:

var sameDay  = allItems.Where(x => x.Start.Date == calendarItem.StartDate.Date 
                            && x.Start.Hour >= startHour && x.End.Hour <= endHour);

只要项目的起始角度等于或大于startHour提供的值,这就有效。但是,例如,如果startHour = 09:00且项目的Start = 8:00和End = 10:00,则会被忽略。

如何在开始时间和结束时间之间包含开始时间的项目?

谢谢!

2 个答案:

答案 0 :(得分:0)

检查是否有效:

var sameDay  = allItems.Where(x => x.Start.Date == calendarItem.StartDate.Date 
                        && x.Start.Hour >= startHour && x.Start.Hour <= endHour);

答案 1 :(得分:0)

var sameDay = allItems.Where(x => x.Start.Date == calendarItem.StartDate &&
    (((x.Start.Hour >= startHour && x.Start.Hour < endHour) ||
    (x.End.Hour > startHour && x.End.Hour <= endHour)) ||
    (x.Start.Hour < startHour && x.End.Hour > endHour)));

检查事件的开始是在时间窗口中,还是事件的结束在时间窗口中,或者事件是否与时间窗口重叠。 (添加了一个修复以防止包含结束和开始时间)

再测试一下,可以缩小它:

var sameDay = allItems.Where(x => x.Start.Date == calendarItem.StartDate &&
    (x.Start.Hour < endHour && x.End.Hour > startHour));