我得到错误 boolean Contains 不支持转换为 SQL
我有应该删除的房间 ID 数组
我想用这个查询删除,但我不能成功。我该怎么做?
var rooms = from rooms in entity.Rooms
where myArray.contains(rooms.RoomID) select rooms;
我得到错误 boolean Contains 不支持转换为 SQL
我有应该删除的房间 ID 数组
我想用这个查询删除,但我不能成功。我该怎么做?
var rooms = from rooms in entity.Rooms
where myArray.contains(rooms.RoomID) select rooms;
您正在尝试混合通话。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));
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();
自从 L2S 以来已经有一段时间了,但这里有。我可以发誓 int[].Contains 是内置的..您是否偶然使用 GUID?也许我在想EF。这有帮助吗:在 where 子句中使用 Array 进行 Linq 查询?
如果您要为此编写 SQL 过程,您将传入 ID 的 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 的翻译(用于字符串)
另一种方法是编写您自己的 UDF,将 CSV 分解为表格并执行SELECT EXISTS
. 应该有很多这样的例子,因为这是您使用存储过程的方式。然后你可以:
var ids = "," + string.Join(",",myArray) + ",";
var rooms = from rooms in entity.Rooms
where MyMethods.Contains(ids,rooms.RoomID) select rooms;