2012-06-02 1 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

Я использую linq для sql –

ответ

1

Вы пытаетесь смешать вызов. Array.Contains происходит на клиенте, но вы помещаете его в середину выражения, которое отправляется на сервер sql.

Вам нужно либо отправить всю партию в sql для сравнения, либо вернуть строки из sql и сравнить их локально.

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

или с использованием синтаксиса лямбда:

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 идентификаторов. Используя ту же самую мысль, которую вы могли бы (предупреждение от верхней части моей головы):

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 Встроенный (для строк)

Alternate, чтобы написать свой собственный UDF, который разбивает CSV на таблицу и делает SELECT EXISTS. Там должно быть много примеров этого, так как вы делаете это с помощью хранимых процедур. Тогда вы можете:

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