1

where句に条件付きロジックがある場合、検索パラメータの値に応じて、linqはさまざまなSQLクエリを作成できます。

この場合、クエリのプリコンパイルを利用して、条件を考慮に入れてみませんか? 複数のプリコンパイル済みクエリを生成する必要があるようです。次に、入力パラメーターに応じて、正しいプリコンパイル済みクエリを起動する必要があります。

ほとんどのブログ エントリ/記事はかなり制限されており、クエリに条件付きロジックがない場合にのみ linq クエリのプリコンパイルを処理しています。そして、クエリのプリコンパイルが常に有益であるとは限らず、使用しない方がよい場合があることを小さな活字で述べているだけです。

たとえば、linq クエリに 1 つの条件付きパラメーターがある場合、2 つの異なる SQL クエリを作成できます。では、これら 2 つの linq クエリをプリコンパイルして、適宜再利用しないのはなぜでしょうか? さまざまなプリコンパイル済みクエリを複数回再利用すると、最終的に処理能力がいくらか節約されると確信しています。

これを提起する理由は、現在、非常に複雑な検索フォームを備えた Web アプリケーションに取り組んでいるためです。典型的な検索フォームには、約 20 のフィールド (文字列、整数、ドロップダウンなど) を含めることができます。検索の 95% で既定のパラメーターが使用されます。しかし、他の検索では複数の検索パラメーターを使用しています。基になる linq クエリはすべてのパラメーターを考慮に入れています。構文は非常に優れており、特に .Where(row=>!model.id.HasValue || row.id==model.id). したがって、int かどうかに応じて、2 つの異なる SQL クエリを生成できます。id に値があるかどうか。私の where 句はもっと複雑で、約 20 個の条件付きパラメーターが必要です。

問題は、条件付きパラメーターに応じてlinqクエリをプリコンパイルすると、パフォーマンスが向上するかどうかです。これにより、条件パラメータの組み合わせごとにプリコンパイルされたクエリが作成されます。したがって、プリコンパイル済みクエリが既に存在して使用できるかどうか、または新しいプリコンパイル済みクエリを作成する必要があるかどうかを判断するには、パラメーターを分析する必要があります。

このソリューションは、後でさらに一歩進めることができます。そのため、Web アプリケーションが開始されると、すべての linq クエリが、条件付きパラメーターのすべての可能な組み合わせに対して事前にコンパイルされます。または、プリコンパイルされたクエリの数を減らすために、最も一般的に使用されるいくつかの限定パラメーターの組み合わせに対してプリコンパイルを使用し、より複雑なシナリオではプリコンパイルされていないクエリを強制的に使用することができます。

4

0 に答える 0