2017-09-13 29 views
-3

我有這個疑問如何使用包含在左外連接的Linq

  from Room in PMSdb.Room_Tbl 
       join Res in PMSdb.Reservation_Tbl on 
       Room.Room_ID equals Res.Room_ID 
       into ej 
       from Res in ej.DefaultIfEmpty() 
       join Feature in PMSdb.Room_Features_Tbl on 
       Room.Room_Features.Split(',').Contains(Feature.Room_Features_ID.ToString()) 
       into FE 
       from Feature in FE.DefaultIfEmpty() 
        select new 
           { 
            Room = Room.Room_Number, 
            Room_type = RoomType.Room_Type_Code 
            Feature =Feature.Feature_Name} 

我需要這樣做 Room.Room_Features.Split(',').Contains(Feature.Room_Features_ID.ToString())但它拒絕 我怎麼能這樣做?

+1

因此'Room_Features'是一個以逗號分隔的功能列表?如果是這樣,簡短的答案是'不這樣做'。您應該改爲具有兩個欄目(Room_ID和Feature_ID)的「RoomFeatures」表格,以便您可以在Room和Feature之間建立多對多的關係。 – mjwills

+0

@GertArnold如何創建一個變量首先如你所說?因爲我沒有它,它動態地獲取編譯 –

+0

@mjwills錯誤'錯誤預計上下文關鍵字「等於」 \t ' –

回答

-2

如何:

(from Room in PMSdb.Room_Tbl 
      join Res in PMSdb.Reservation_Tbl on 
      Room.Room_ID equals Res.Room_ID 
      into ej 
      from Res in ej.DefaultIfEmpty() 
      select new { room = Room, res = Res) 
      .Where(x => x.Res == null) 
      .Select(x => new { 
          Room = x.room.Room_Number, 
          Room_type = x.room.Room_Type_Code, 
          Features = x.room.Room_Features.Split(new char[] {','}) 
           .Select(y => PMSdb.Room_Features_Tbl.Where(z => z.Room_Features_ID.ToString() == y.Trim()).FirstOrDefault()) 
           .ToList() 
      }).ToList(); 
+0

「Contains」發生了什麼?這在邏輯上是不同的。而EF6不會接受'String.Split'。不幸的是,OP沒有告訴他們實際使用了哪個ORM。 –

+0

@JdWeng哪裏是Room_Feature表?我想從中選擇 –

+0

是不是它的一部分:PMSdb.Room_Tbl中的房間? – jdweng

0

你真的應該考慮使用結合表正常化的數據,以逗號分隔的字段是壞的數據庫設計的一個標誌。

這就是說,問題是實體框架無法將string.Split()轉換爲SQL查詢。

如果您的數據存儲爲,val1,val2,,val3,(因此前綴並用逗號後綴和逗號無效的值),你可以求助於string.Contains,這可以被翻譯成SQL:

Room.Room_Features.Contains($",{Feature.Room_Features_ID},") 
+0

OP可能沒有改變現有數據庫的選擇,所以你的推薦是無用的 – jdweng

+1

@jdweng bugger off隨着你的復仇降臨,許多人向你解釋了多次「嘗試這個[代碼塊]」並不是一個好的答案,正如[答案]中所解釋的。除此之外,我的答案確實包含了一個不需要數據庫結構的解決方案要改變,嘗試閱讀超出第一句話。 – CodeCaster