4

http://www.albahari.com/nutshell/predicatebuilder.aspxの PredicateBuilder を使用して、実行時に linq 式を動的に作成しようとしています。

現在、基準オブジェクトのリストを取得し、この投稿で説明されているように、それらを複数の述語に解析するメソッドがあります。

したがって、現在、私のコードは次のシナリオをサポートしています。

WHERE 
    ((a == <val1>) AND (b == <val2>) AND (c == <val3>))
OR
    ((a == <val4>) AND (b == <val2>) AND (c == <val3>))

しかし、私は次のように動作する必要があります:

WHERE 
    ((a == <val1> OR a == <val4>) AND (b == <val2>) AND (c == <val3>))
OR
    ((a == <val7>) AND (b == <val5>) AND (c == <val6>))

ロジックが適切に流れるように、2 つの「OR」を「グループ化」できるようにするにはどうすればよいですか? 「a OR a AND b AND c」は必要ありません。「(a OR a) AND b and C」が必要です。

4

1 に答える 1

5

これらの述語の「動的」な側面は、まったく明確ではありません。必要な式をand式 (もちろん適切な括弧を使用して) でPredicateBuilder組み立てることができる場合に、わざわざ気にする必要はありません。&&||

いずれにせよ、あなたが望むことを達成する方法は次のとおりですPredicateBuilder:

var p1 = PredicateBuilder.False<Foo>()
                         .Or(foo => foo.A == <val1>)
                         .Or(foo => foo.A == <val4>)
                         .And(foo => foo.B == <val2>)
                         .And(foo => foo. C == <val3>);

var p2 = PredicateBuilder.False<Foo>()
                         .Or(foo => foo.A == <val7>)
                         .And(foo => foo.B == <val5>)
                         .And(foo => foo.C == <val6>);

var finalPredicate = p1.Or(p2);

アイデアは、個々の「単純な」式を作成し、最終的にORそれらをまとめて最終的な述語を作成することです。

于 2011-08-15T15:05:16.517 に答える