【问题标题】:SQL Linq Reservation AvailabilitySQL Linq 预留可用性
【发布时间】:2017-09-25 13:43:28
【问题描述】:

我想创建一个预订系统,该系统具有在预订前检查房间可用性的功能。我在 MVC asp 网络中这样做。

但是,我在调用用于检查可用性的 SQL 时遇到问题,因为 My Reservation 和 RoomType 表具有多对多关系。

我的表和数据模型如下:

到目前为止,我已经自己想出了以下几点:

Select * from RoomTypes
 where id = 3 and not exists
    (select * from Reservation_RoomType 
    where ReservationId = 
        (select id from Reservations where Arrival <= '2017-05-18' and Depature >= '2017-05-20' ))

在 Linq 中

        var query = (from rooms in context.RoomTypes
                     where (rooms.Id == modelid) &&
                     !(context.Reservation_RoomTypes.Any(a => a.ReservationId ==
                               (from reservations in context.Reservations where (reservations.Arrival <= DateTime.Parse("2017-05-18"))
                                && (reservations.Depature => DateTime.Parse("2017-05-18"))) select *);

由于我当前的播种,这应该不会返回任何房间,但如果我将房间 ID 更改为其他应该可用的东西,它仍然不会显示任何房间。 SQL 不是我的强项,我很肯定我的 linq 表达式格式错误。任何帮助都将不胜感激,因为我把头发扯掉了!

【问题讨论】:

  • 您使用哪一列来检查房间的可用性?
  • 您想要房型(单人)还是特定房间(103)的可用性
  • 实际上,由于 db 模式当前所在的位置,您无法获得可用的实际房间号,只需按类型计算可用房间的数量。是否可以更改架构,或者只是检索?
  • @MadMyche 是的,我一直在考虑必须更改架构,这很好。我正在寻找房间类型的可用性

标签: c# mysql asp.net asp.net-mvc linq


【解决方案1】:

最好能更好地了解您想要从结果中得到什么。我只能根据您当前的 SQL 进行猜测。当我看到没有 JOIN 并且有许多 SELECT 语句的 SQL 时,我会犹豫(这并不意味着它完全错误,它有时只是一个危险信号。)

根据您提供的信息,我只能告诉您您当前的 SQL 出了什么问题。

改变

where ReservationId = 

where ReservationId IN 

In 将评估所有结果。

如果这不起作用,请从结果中更好地描述您想要什么,您的确切评估是什么。

【讨论】:

  • 我同意需要澄清;我个人认为,如果可能,需要修改 db.schema。我们真正能做的就是看看有哪些房间可用,因为 bridge 表应该保存房间号以添加或替换类型。
  • @MadMyche 100% 在那里,它也让我感到困惑,让我感到困惑的一件事是,“ROOMTYPES”表实际上是一个“ROOMS”表——这个命名选择困扰着每个开发人员,包括写它的人。 SQL 总是感觉你做错了什么。
  • @Eddie 我正在寻找的结果是个人将能够在他们选择的日期搜索可用的房间,他们还可以选择特定的房间类型,如“单人”或“双人”。显然,如果房间在这几天已经有预订,则不会显示。
猜你喜欢
  • 2014-11-30
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多