【发布时间】:2019-02-25 04:02:28
【问题描述】:
我有一个名为 Bookings 的表格,其中包含以下列:-
RoomId (int)
ArrivalDate (datetime)
DepartureDate (datetime)
我遇到的问题是检查已创建的预订。下面的例子。
预订 1 - 1 晚
到达日期 = 17/09/2018
出发日期 = 18/09/2018
预订 2 - 2 晚
到达日期 = 18/09/2018
出发日期 = 20/09/2018
预订 3 - 4 晚
到达日期 = 21/09/2018
出发日期 = 25/09/2018
因此,从 2018 年 9 月 20 日到 2018 年 9 月 21 日的 1 晚预订可用。
我的困难是找到正确的查询来应对以下情况。
预订 4 - 3 晚
到达日期 = 20/09/2018
出发日期 = 23/09/2018
这将失败,因为预订 3 已被 21/09/2018 和 22/09/2018 占用。
预订 5 - 7 晚
到达日期 = 20/09/2018
出发日期 = 27/09/2018
这将失败,因为预订 3 已预订 21/09/2018、22/09/2018、23/09/2018 和 24/09/2018。但是,25/09/2018 和 26/09/2018 可用
我已经编写了一个函数来检查是否可以进行预订,尽管它目前失败了。
var o = await dc.Bookings.Where(c =>
c.RoomId == roomId && c.IsDeleted == false &&
(c.ArrivalDate > arrivalDate && c.DepartureDate < departureDate)).CountAsync();
Select * From Bookings Where RoomId = 1 And
(ArrivalDate Between '2018-09-20 00:00:00.000' And '2018-09-21 00:00:00.000') Or
(DepartureDate Between '2018-09-20 00:00:00.000' And '2018-09-21 00:00:00.000') Or
(ArrivalDate >= '2018-09-20 00:00:00.000' And DepartureDate <= '2018-09-21 00:00:00.000')
我整天都在做这件事,但一直想不通。任何指向正确方向的指针将不胜感激。
【问题讨论】:
-
this 有帮助吗?
-
什么查询不起作用? EF、SQL 还是两者兼而有之?
标签: c# sql entity-framework linq date