2011-11-01 144 views
0

我有一个StartDateTime和EndDateTime的日历事件。这些事件作为记录存储在数据库中。我想获得特定日期的所有活动。有多种场景可以立刻想到。如何获取特定日期的日历活动?

给出一个具体的日期12/01/2011,我想它落在12/01/2011(从12:00:00 AM 11:59:59 PM)事件。

所以我需要选择:

  1. 活动,其的startDateTime和EndDateTime落入12/01/2011 12:00:00 AM和12/01/2011下午11时59分00秒

    范围
  2. 跨越第二天的活动。 StartDateTime在12/01/2011 11:59:59 PM之前,但EndDateTime在将来的某个时间

  3. EndDateTime在2011年12月1日晚上11点59分59秒之前且StartDateTime为before 12/01/2011 12:00:00 AM

  4. 跨越多天的事件。 StartDateTime在12/01/2011 12:00:00 AM之前,EndDateTime在12/01/2011 11:59:59 PM之后

我可能会缺少其他场景。我有一种感觉,这不是一个原始的问题,并有方法在那里做我所需要的。有没有一种标准的方式来选择这些事件?

+0

这些事件在哪里以及如何表示?你的问题还不清楚。 – Oded

+0

这些事件是数据库表中的记录。每条记录都有类型为datetime的StartDateTime和EndDateTime。我试图使用LINQ查询这些事件 –

回答

1

我觉得你4箱子分解为单一语句(伪)

if ((StartDate <= InputDate) && (EndDate >= InputDate)) 
+1

请注意,如果您将'InputDate'更改为'timestamp'(因为您的数据似乎当前已存储),则您需要将'StartDate'比作__开始_ **下一个**日,然后是**输入**日期开始的'EndDate'。与'date'数据类型比较,这个语句可以很好地工作。 –

0

合并由Jason和X-Zero的建议的解决方案后,这里是我的本钱。

DateTime inputDateStart = inputDate; 
DateTime beginningOfNextDay = inputDate.AddDays(1); 


IQueryable<MyEvent> inputDayEvents = (<collection of all the events here>) 
.Where(e => e.StartDateTime < beginningOfNextDay && e.EndDateTime >= inputDateStart) 

这是查询的可视化表示形式。

enter image description here