2011-11-01 145 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