我有一個預訂 Web 應用程式,其中預訂存盤從和至今的日期。
進行新的預訂時,我需要檢查自始至終的預訂是否在自始至終的任何預訂之內。
假設我有一個預訂:
A 從日期:10/10/2021 A 到日期:15/10/2021
如果我嘗試通過以下方式進行新預訂:
A 從日期:09/10/2021 A 到日期:16/10/2021
然后它應該回傳false
或者,如果我嘗試通過以下方式進行新預訂:
A 從日期:10/10/2021 A 到日期 11/10/2021
那么它應該回傳false。
到目前為止,這就是我所擁有的:
var bookings = _bookingRepository.GetAll().Where(oldBooking => newBookingfrom >= oldBooking.From && newBookingTo <= oldBooking.To);
但這并沒有按預期作業,當我第一次接觸它時,這似乎很容易,但真讓我困惑。
僅供參考:GetAll() 方法從資料庫回傳所有預訂。
uj5u.com熱心網友回復:
要檢查的間隔交疊另一個,你需要一個比較終點向其他起點,反之亦然。
var bookings = _bookingRepository.GetAll()
.Where(oldBooking =>
newBookingfrom < oldBooking.To &&
newBookingTo > oldBooking.From );
要獲得不重疊的結果,只需添加!(整個條件。
請注意,根據您是否涉及時間組件,您可能需要將條件更改為>=。
uj5u.com熱心網友回復:
我建議使用此查詢,true如果時間范圍不重疊,它將回傳,否則它將回傳false。
var bookings = _bookingRepository.GetAll()
.Where(oldBooking =>
newBookingfrom > oldBooking.To ||
newBookingTo < oldBooking.From );
在這里,我假設您已經在檢查它newBookingfrom總是在之前newBookingTo并且日期范圍是資料庫也是正確的范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327959.html
