我正在C#类中做最后一个项目,必须构建一个酒店管理系统,但是我目前坚持检查两个日期之间是否已经预订了房间。我试图自己解决这个问题,但是我不知道如何将查询字符串转换为LINQ。
有什么帮助吗?
query = "SELECT * FROM Suites WHERE SuiteType = " + suitetype + " AND NumberOfAdultsAllowed >= " + adults + " AND NumberOfChildrenAllowed >= " + children + " AND ";
query += "Suites.SuiteNumber NOT IN (SELECT SuiteNumber FROM Bookings WHERE ";
query += "(StartDate BETWEEN @_start AND @_end) OR ";
query += "(EndDate BETWEEN @_start AND @_end) OR ";
query += "(@_start BETWEEN StartDate and EndDate) OR ";
query += "(@_end BETWEEN StartDate and EndDate) OR ";
query += "(@_start <= StartDate and @_end >= EndDate) OR ";
query += "(@_start >= @_end))";
我想到先去所有房间
var querySearch = from q in db.Suites
where q.SuiteType == suitetype
select q;
然后针对另一个查询进行检查,该查询检查套件号是否在表中Bookings
以及是否在指定的日期之间。
但是我每次都会迷路。
这是很基本的。唯一的皱纹是子选择,您可以执行以下操作。
您的某些预订逻辑有点多余,在开始日期和结束日期之间的日期不可能也没有在开始日期/结束日期之间的开始日期或结束日期。因此,您可以减少这一点。
而且,last或condition几乎使所有先前的逻辑无效,因为它包括以开始之后的结尾为准的任何日期。
注意:这未经测试,但应该可以使用。
var bookings = from b in db.Bookings
where (b.StartDate >= start && b.StartDate <= end)
|| (b.EndDate >= start && b.EndDate <= end) select b.SuiteNumber;
var querySearch = from q in db.Suites
where q.SuiteType == suitetype
&& q.NumberOfAdultsAllowed >= adults
&& q.NumberOfChildrenAllowed >= children
&& !bookings.Contains(q.SuiteNumber)
select q;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句