两个日期之间的房间可用性(初学者)

时间:2015-05-30 14:55:33

标签: c# sql service

我正在使用Visual Studio Community 2013并为我的班级开发一个项目,我正在制作一个非常简单的酒店预订系统,用于员工创建新客户并将其预订到一个房间。< / p>

当用户尝试两次预订同一个房间或重叠时,我需要系统不允许它,而我正在尝试处理服务。 (见下文)

int main() {
  char ans = 'N';
  do {
    // calculator stuff, better to be in a separate function

    cout << "Do you want to continue (Y/N)?\n";
    cout << "You must type a 'Y' or an 'N' :";
    cin >> ans;
  } while ((ans == 'Y') || (ans == 'y'));
}

我遇到的问题是,无论我在创建新预订时投入的日期是什么,系统都会抛出BookingException&#34;房间已经出现&#34;,即使我的DBseed只有两个日期在里面。 (见下文)

public override void Add(Booking booking)
{
    // Don't allow a new booking if the room is already out.

    var currentBooking = _ctx.Bookings
        .Where(b => b.RoomId == booking.RoomId)
        .Select(b => (b.CheckOut < booking.CheckIn 
                       && b.CheckIn  < booking.CheckIn) 
                      || (b.CheckIn > booking.CheckOut 
                       && b.CheckOut > booking.CheckOut ))
        .FirstOrDefault();

    if (currentBooking != null)
    {
        throw new BookingException("The Room is already out on that date.");
    }

    booking.CheckIn = DateTime.Now.Date;  
    _ctx.Set<Booking>().Add(booking);
    _ctx.SaveChanges();
}

我认为我的问题在于服务,但我无法弄清楚具体问题是什么。

1 个答案:

答案 0 :(得分:0)

这个currentBooking是bool因此它总是抛出异常,即它永远不会为null。

切换if语句以检查是否似乎突出了Linq中的过滤问题。我不得不说我刚刚重写了这个选项,我只进行了几次测试,但这似乎有效:

        currentBooking = _ctx.Booking
            .Where(b => b.RoomId == booking.RoomId)
            .Select(b => (booking.CheckIn < b.CheckOut && booking.CheckIn > b.CheckIn))
            .FirstOrDefault();

        if (currentBooking)
        {
            throw new Exception("The Room is already out on that date.");
        }