2012-08-10 45 views
1

我想知道是否有人可以幫助我?我試圖防止事件在房間預訂系統中重疊。每個事件都有一個開始日期/時間和結束日期/時間。我想要發生的事情是,如果用戶試圖在事件已存在的時間之間預訂事件,則應該發生錯誤。如何使用Linq + Entity Framework預防重疊事件

因此,例如以下應誤差它們重疊: -

Event 1: 
- Start Date/Time: 10/08/2012 09:00 
- End Date/Time: 10/08/2012 11:00 

Event 2: 
- Start Date/Time: 10/08/2012 10:00 
- End Date/Time: 10/08/2012 12:00 

我使用MVC和Entity Framework,所以LINQ的解決方案將是可取的。

任何幫助,將不勝感激:)

+1

有關解決方案,請參閱http://stackoverflow.com/questions/4446112/search-for-interval-overlap-in-list-of-intervals。 – 2012-08-10 09:21:07

回答

3

你的意思是這樣的:

new List<Event>() 
{ 
    new Event() { StartsAt = DateTime.Now.AddHours(-1), EndsAt = DateTime.Now.AddHours(1) } 
}; 

Event newEvent = new Event() { StartsAt = DateTime.Now.AddHours(-3), EndsAt = DateTime.Now.AddHours(-2) }; 
bool newEventBookable = !existingsEvents.Any(x => x.StartsAt <= newEvent.EndsAt && x.EndsAt >= newEvent.StartsAt); 

然後你可以隨便扔一個錯誤,如果newEventBookable是假的。

我認爲這個邏輯對於之前的,後續的,重疊的和包含的事件是可以的 - 但我很快就會發現它不是這樣!

+1

謝謝你這正是我之後:) – 2012-08-10 14:25:46

+0

同意http://stackoverflow.com/a/2368885/610832,但我覺得你更容易遵循。 – zacharydl 2014-10-31 03:43:57

+0

我想允許背靠背約會,所以我將'<=' and '> ='改爲只有'<' and '>' – zacharydl 2014-10-31 04:11:52