У меня есть таблица с именем Заказы , которая содержит следующие столбцы: -
RoomId (int)
ArrivalDate (datetime)
DepartureDate (datetime)
У меня проблема с проверкой уже созданных заказов.Примеры ниже.
Бронирование 1 - 1 Ночь
ArrivalDate = 17/09/2018
DepartureDate = 18/09/2018
Бронирование2 - 2 ночи
Дата прибытия = 18/09/2018
Дата вылета = 20/09/2018
Бронирование 3 - 4 ночи
Дата прибытия = 21/ 09/2018
Дата отправления = 25/09/2018
Таким образом, остается возможность бронирования на 1 ночь с 20/09/2018 по 21/09/2018.
Моя борьба заключается в поиске правильного запроса для борьбы с приведенными ниже сценариями.
Бронирование 4 - 3 ночи
ArrivalDate = 20/09/2018
DepartureDate = 23/09/2018
Это не удастся, потому что в бронировании 3 уже занято 21/09/2018 и 22/09/2018.
Бронирование 5 - 7 ночей
ArrivalDate = 20/09/2018
DepartureDate = 27/09/2018
Это не будет выполнено, так как в бронировании 3 есть 21/09/2018, 22/09/2018, 23 /09/2018 и 24.09.2008 уже заняты.Но 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')
Я был в этот ВЕСЬ день и не смог понять это.Любые указатели в правильном направлении будут с благодарностью.