動的 linq WHERE ステートメントがあります。
dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");
私はに変更したい:
dataContext.Table.Where("id IN (0, 1, 2, ...)");
しかし、うまくいきません。パフォーマンスを向上させるためにこれを行うにはどうすればよいですか?
動的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);
あり、その逆ではなく、そのバージョンはそのままでは機能しないと思います。
この機能を動的リンクに追加する方法については、こちらを参照してください。これにはライブラリを変更する必要があります。
var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))