我正在使用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();
}
我认为我的问题在于服务,但我无法弄清楚具体问题是什么。
答案 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.");
}