2012-06-02 55 views
1

我得到了錯誤的布爾包含不支持轉換爲SQL布爾包含不支持轉換爲SQL

我房間ID應刪除

我想這個查詢,但我刪除的陣列不能成功。我該怎麼做?

var rooms = from rooms in entity.Rooms 
      where myArray.contains(rooms.RoomID) select rooms; 
+0

你使用什麼LINQ技術? EF? L2S? – Gabe

+0

我m使用LINQ到sql –

回答

1

您試圖混合呼叫。 Array.Contains發生在客戶端上,但是您將它放到發送到SQL Server的表達式的中間。

您需要將整個批次發送到sql進行比較,或者從sql返回行並在本地進行比較。

rooms = from room in entity.Rooms.AsEnumerable() 
     where myArray.contains(room.RoomID) 
     select room; 

或使用lambda語法:

rooms = entity.Rooms.AsEnumerable.Where(room => myArray.contains(room.RoomID)); 
+0

仍編輯相同的錯誤 –

+0

。請再試一次。 –

+0

謝謝!它現在正在工作:) –

0
var roomslist =myArray.ToList(); 
    var roomsTemp = entity.Rooms; 
    var rooms=roomsTemp.Where(x=>roomslist.Contains(x.RoomId)).ToList(); 

如果不工作,那麼這應該工作,但我不使用這個建議更換:

var roomslist =myArray.ToList(); 
    var roomsTemp = entity.Rooms.ToList(); 
    var rooms=roomsTemp.Where(x=>roomslist.Contains(x.RoomId)).ToList(); 
+0

仍然有相同的錯誤 –

0

它已經因爲L2S一段時間,但在這裏不用。我可以發誓int []。包含內置..你是否偶然使用GUID?也許我在想EF。這是否有幫助:Linq query with Array in where clause?

如果您要爲此編寫SQL過程,您需要傳入一個CSV字符串的ID。使用同樣的想法,你可以(警告了我的頭頂部):

var ids = "," + string.Join(",",myArray) + ","; 
var rooms = from rooms in entity.Rooms 
     where SqlMethods.Like("," + rooms.RoomID + ",", ids) select rooms; 

也許ids.Contains("," + rooms.RoomID + ",")將工作作爲具有對SQL內置(字符串)翻譯

替代是寫自己的UDF將CSV分解成表並執行SELECT EXISTS。應該有很多這樣的例子,因爲它是用存儲過程來完成的。那麼你可以:

var ids = "," + string.Join(",",myArray) + ","; 
var rooms = from rooms in entity.Rooms 
     where MyMethods.Contains(ids,rooms.RoomID) select rooms;