LINQ で IN ステートメントを生成するのに問題があります。検索する主キーを表す long のリストを入力として受け取る、以下のような関数があります。contains メソッドを使用すると、複合 OR ステートメントのクエリが生成されます。Oracle データベースに対して実行しています。LINQ/EF の最新バージョンを使用しています。QueryableDbSet は DbSet です。PrimaryKey プロパティは 10 進数値であり、Oracle のオブジェクトのプライマリ整数識別子です。
List<long> GetList(List<long> ids)
{
List<decimal> dIds = ids.Select(x => (decimal)x);
var query = from c in QueryableDbSet
where dIds.Contains(c.PrimaryKey)
select (long)c;
return query.ToList();
}
上記のコードは、複合 OR ステートメントを生成します。LINQ でより高速な IN ステートメントを生成する方法を知っている人はいますか? ありがとう。
編集: さらに調査を行うと、Oracle は実際に IN ステートメントを OR チェーンに変換しているように見えるため、これは無駄な作業である可能性があります。誰でもこれを確認または否定できますか?
また、上記の機能は完全に無意味/冗長であることを認識しています。私の実際の使用例はより複雑で、where 句に他の条件が含まれています。