【发布时间】:2017-05-10 16:08:31
【问题描述】:
我正在尝试创建一个系统,用户将输入他们希望拥有的到达日期和离开日期以及房间类型,然后程序将检查是否有任何该类型的房间可用,如果有,它将返回房间号。
这是我用来从视图中检索信息的视图模型
public class AvailabilityDTO
{
[Key]
public string Id { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime Arrival { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime Departure { get; set; }
[Required]
public string RoomType { get; set; }
}
这是我的数据库表
问题是我不确定如何使用 LINQ 表达式来获取具有与所述相同 RoomTypes 但在所选日期内不属于任何预订的房间的房间号。
我得到的最接近的方法是使用我在创建 Reservation 时使用的相同 LINQ 表达式来检查它是否在管理 CRUD 中的这些日期被占用。 该表达式是:
private bool OccupiedRoom(Reservation CurrentReservation)
{
var currentBooking = db.Reservations
.Where(b => b.RoomId == CurrentReservation.RoomId)
.Select(b => (b.Arrival <= CurrentReservation.Arrival && b.Depature >= CurrentReservation.Arrival) ||
(b.Arrival < CurrentReservation.Depature && b.Depature >= CurrentReservation.Depature) ||
(CurrentReservation.Arrival <= b.Arrival && CurrentReservation.Depature >= b.Arrival)
)
.FirstOrDefault();
return currentBooking;
}
然而,试图修改它以适应我的情况让我非常难过,任何帮助都是值得的。
【问题讨论】:
-
不要在您的问题中放置代码图像。复制并粘贴它,这样我们就可以实际使用它,而无需重新输入大量的 LINQ 语句。
-
@MrZander 那是我编辑的对不起。
-
伪代码:
var bookableRooms = AllRooms.Except(Rooms_with_conflicting_reservations)当然,如果你有房间的导航属性预订也会更容易。
标签: c# sql asp.net-mvc linq querying