3

EF 4.4 を使用するリポジトリと、クエリをフィルター処理するために使用できるパラメーターを持つクラスがあります。また、SQLQuery を使用して動的な raw SQL を作成し、null ではないパラメータ クラスのプロパティに従って条件を追加します。

ただし、SQL クエリでは熱心な読み込みが許可されていないため、積極的な読み込みを使用できるようにするために、LinQ で動的クエリを作成する方法を知りたいです。

この投稿を読みました

パラメーター クラスを使用しますが、1 つのパラメーターのみを使用してクエリを実行しますが、クラスに多くのパラメーターがあり、多くの組み合わせがある場合、どうすればよいでしょうか? 考えられるすべての組み合わせを考慮に入れるには、他にも多くのことをする必要がありますか? 生のSQLを使用する場合、パラメーターがnullかどうかを確認するだけでよく、nullでない場合は、「where」を追加する最初のパラメーターであるか、「and」を追加するかを確認するだけです。したがって、考えられるすべてのパラメータの組み合わせを考慮する必要がないため、コードは短くなります。

LinQ で動的クエリを実行するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

3
var query = ctx.Books;

if ( param1 != null )
   query = query.Where( b => b.Param1 == param1 );

if ( another2 > 0 )
   query = query.Where( b => b.Amount > another );

ご覧のとおり、句は任意の外部基準に基づいて動的に構成され、最終的にクエリ構造を完全に制御できます。

EF は引き続き単一の db クエリとして実行することに注意してください。

于 2013-06-15T09:14:59.910 に答える
1

次のようなことができます。

bool consider1stParam = is it not null?
bool consider2ndParam = is it not null?
bool consider3rdParam = is it not null?
... //And so on for each parameter you wish to include in the query

次に、次のような構文を使用してクエリを実行します (ユーザーを処理するとします)。

users = users
        .Where(u => (consider1stParam && (Your 1st param examination here)) ||
                        (consider2ndParam && (Your 2nd param examination here)) ||
                        (consider3rdParam && (Your 3rd param examination here)) 
                     ... and so on);

これにより、以前の設定に従って where クエリに「フィルター」が追加されます。

同様に、"Or" 処理の代わりに "And" 処理フィルタになるように少し変更することもできます。

于 2013-06-15T10:11:33.937 に答える