У меня есть таблица 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 ночи
Дата прибытия = 09 21 2018
Дата отъезда = 09 25 2018
Таким образом, остается возможность бронирования на 1 ночь с 20 сентября 2018 года по 21 сентября 2018 года.
Моя борьба заключается в том, чтобы найти правильный запрос для борьбы с приведенными ниже сценариями.
Бронирование 4 — 3 ночи
Дата прибытия = 09 2018 г.
Дата отъезда = 09 23 2018 г.
Это не удастся, поскольку бронирование 3 уже занято 21 сентября 2018 г. и 22 сентября 2018 г.
Бронирование 5 – 7 ночей
Дата прибытия = 09 2018 г.
Дата отъезда = 09 27 2018 г.
Это не удастся, поскольку бронирование 3 уже занято на 21 9 июня 2018 года, 22 сентября 2018 года, 23 сентября 2018 года и 24 сентября 2018 года. Но 25 сентября 2018 г. и 26 сентября 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')
Я был в этом ВЕСЬ день и не смог понять это. Любые указатели в правильном направлении будут очень признательны.
Other.IDBooking <> ToUpdate.IDBooking
. @Дейн 20.09.2018SELECT * FROM Bookings WHERE RoomId = 1 AND '24/09/2018' > ArrivalDate AND DepartureDate > '21/09/2018' AND Id <> 1
. Обратите внимание, что я добавилId <> 1
, потому что бронирование всегда будет конфликтовать само с собой; вы хотите проверить только другие. 20.09.2018