15

動的 linq WHERE ステートメントがあります。

dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");

私はに変更したい:

dataContext.Table.Where("id IN (0, 1, 2, ...)");

しかし、うまくいきません。パフォーマンスを向上させるためにこれを行うにはどうすればよいですか?

4

3 に答える 3

13

動的linqクエリで「contains」または「like」を使用する方法から?

//edit: this is probably broken, see below
ids = new int[] {1,2,3,4};
dataContext.Table.Where("id.Contains(@0)", ids);

余談: 動的な linq 式でプレースホルダーを使用することをお勧めします。そうしないと、linq インジェクション攻撃にさらされる可能性があります (動的 LINQ を介してインジェクションは可能ですか? )


編集:

実際、私はこれを台無しにしたと思います。残念ながら、現時点ではこれをテストできません。しかし、この場合の正しい構文は でdataContext.Table.Where("@0.Contains(id)",ids);あり、その逆ではなく、そのバージョンはそのままでは機能しないと思います。

この機能を動的リンクに追加する方法については、こちらを参照してください。これにはライブラリを変更する必要があります。

于 2012-04-17T18:10:59.137 に答える
6
var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))
于 2012-04-17T07:34:17.117 に答える