簡體   English   中英

如何將此查詢字符串轉換為LINQ to SQL查詢?

[英]How to convert this query string into LINQ to SQL query?

我正在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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM