2

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 句に他の条件が含まれています。

4

0 に答える 0