我有一个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,则会被忽略。
如何在开始时间和结束时间之间包含开始时间的项目?
谢谢!
答案 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));