检查2个日期是否在其他2个日期的范围内



我有一个预订web应用程序,预订存储从日期到日期。

当有新的预订时,我需要检查日期和日期的预订是否在日期和日期的任何预订范围内。

假设我预订了:

A,日期:10/10/2021A至日期:2021年10月15日

如果我尝试用:

进行新的预订A,日期:202021年10月9日截止日期:2021年10月16日

那么应该返回false

或者如果我尝试用:

进行新的预订A,日期:10/10/2021A至2021年10月11日止

那么它应该返回false

到目前为止,这是我所拥有的:

var bookings = _bookingRepository.GetAll().Where(oldBooking => newBookingfrom >= oldBooking.From && newBookingTo <= oldBooking.To);

但这并不像预期的那样工作,当我第一次接触它时,这似乎很容易,但它让我感到困惑。

供参考:GetAll()方法返回的所有预订从DB。

要检查一个区间是否与另一个区间重叠,您需要将一个端点与另一个起点进行比较,反之亦然。

var bookings = _bookingRepository.GetAll()
.Where(oldBooking =>
newBookingfrom < oldBooking.To &&
newBookingTo > oldBooking.From );

要得到重叠的结果,只需在整个条件上加上!(

请注意,根据是否涉及时间组件,您可能需要将条件更改为>=

我建议使用这个查询,如果时间范围不重叠,它将返回true,否则它将返回false

var bookings = _bookingRepository.GetAll()
.Where(oldBooking =>
newBookingfrom > oldBooking.To ||
newBookingTo < oldBooking.From );

在这里,我假设你已经检查了newBookingfrom总是在newBookingTo之前,并且日期范围是数据库也是正确的范围。

相关内容

  • 没有找到相关文章

最新更新