2

PredicateBuilderColin Meek の同等のものを使用して、WCF Data Services に適した (呼び出し式などを使用しない) 方法で述語を構成しています。これらは一部のクエリでは機能しますが、クエリの複雑さが増すにつれて「再帰が許可された制限に達しました」で失敗します。残念ながら、この制限は、私のコードの通常の状況で予想される制限を下回っています。また、いつこの制限に達するかを事前に判断することもできません。

次のことが可能です。

  • WCF Data Services に到達する前に述語を単純化しますか?
  • クエリの複雑さが WCF Data Services の制限をいつ超えるかを判断しますか?

私のコードでは、'state' パラメーターと 'city' パラメーターを受け入れる Azure Data Market サービスの述語を作成しています。各都市*州の組み合わせに対して呼び出しを発行するのではなく、次の行に沿って述語を構成しています。

((city eq City11 or city eq City12 ...or city eq City1N) and (state eq State1))
...
or
((city eq CityM1...) and (state eq StateM))

式ツリーのため、実際には述語は次のようになります。

((false or (((false or (City eq City11)) or (City eq City12)) and (State eq State1))) or (((false or (City eq City21)) or (City eq City22)) and (State eq State2)))

LINQPad を使用して、リクエストをキャプチャし、手動で単純化し、これらの作業が単純化されたことを証明できます。私のコードでは単純化が試みられていないため、Azure Data Services にヒットする OData クエリは過度に複雑/再帰的であり、例外が生成されます。上記の概要では、(x または y) または z == x または y または z などの単純化を適用します。これにより、クエリの複雑さを十分に軽減して、合格することができます。したがって、上記の2つの質問。

ヘルプ/ポインタは大歓迎です!

4

0 に答える 0