1

エラー boolean Contains does not support conversion to SQL が発生しました

削除する必要がある部屋IDの配列があります

このクエリで削除したいのですが、うまくいきません。どうすればいいですか?

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

3 に答える 3

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));
于 2012-06-02T11:55:56.643 に答える
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();
于 2012-06-02T11:54:02.640 に答える
0

L2Sからだいぶ経ちましたが、いきます。私は int[].Contains が組み込まれていることを誓うことができました.. 偶然に GUID を使用していますか? 多分私はEFのことを考えています。これは役に立ちますか: where 句に配列を使用した 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 Built in (文字列の場合) への変換があるため、おそらく機能するでしょう。

別の方法として、CSV をテーブルに分割し、SELECT EXISTS. これはストアド プロシージャで行う方法であるため、多くの例があるはずです。次に、次のことができます。

var ids = "," + string.Join(",",myArray) + ",";
var rooms = from rooms in entity.Rooms 
        where MyMethods.Contains(ids,rooms.RoomID) select rooms;
于 2012-06-02T12:25:10.727 に答える