首页 文章

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

提问于
浏览
-2

我有一个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
    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));
    
  • 0

    检查是否有效:

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

相关问题