如何使用Linq + Entity Framework防止重叠事件

时间:2012-08-10 09:09:25

标签: asp.net-mvc 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和实体框架,因此Linq解决方案更可取。

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分: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为false,则可以抛出错误。

我认为这种逻辑适用于先前,后续,重叠和包含的事件 - 但我很快就会发现它是不是!