【问题标题】:boolean Contains does not support conversion to SQLboolean Contains 不支持转换为 SQL
【发布时间】:2012-06-07 09:22:45
【问题描述】:

我收到错误 boolean Contains 不支持转换为 SQL

我有一组房间 id 应该被删除

我想用这个查询删除,但我不能成功。我该怎么做?

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

【问题讨论】:

  • 您使用的是什么 LINQ 技术?英孚? L2S?

标签: sql linq linq-to-sql contains


【解决方案1】:
   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();

【讨论】:

    【解决方案2】:

    您正在尝试混合通话。 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));
    

    【讨论】:

    • 请注意,您将把所有房间拉回内存然后过滤它们,即读出整个表格。这对于少数房间来说可能没问题。
    【解决方案3】:

    自 L2S 以来已经有一段时间了,但现在开始了。我可以发誓 int[].Contains 是内置的..您是否偶然使用 GUID?也许我在想EF。这有帮助吗:Linq query with Array in where clause?

    如果您要为此编写 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      相关资源
      最近更新 更多