1

操作が常に操作の前に適用される場合、 OData プロトコルのドキュメントに言及が見つかりませんでした。明らかに、一貫したページ検索アルゴリズムを実装する場合、そうすることが理にかなっています。$filter$skip

私の懸念は、式ツリーがそのような制約を課していないことです。たとえば、次の 2 つのクエリは通常、異なる結果を生成します。

IQueryable<string> query = (new[] { "aaa", "eee", "bbbb", "cccc", "dddd" }).AsQueryable();

query.Where(arg => arg.Length > 3).Skip(1);
query.Skip(1).Where(arg => arg.Length > 3);

OData の ASP.NET Web API RC 実装を使用していくつかの簡単なテストを行いましたが、演算子がクエリ文字列のどこにあるかに関係なく、$filter前に適用されます。$skipしかし、これは一般的に真実ですか?

4

1 に答える 1

2

MS-ODATA (OData の OSP 仕様)は次のように述べています。複数のクエリ オプションが存在するデータ サービス URI は、URI のリソース パス セクションで識別されるリソースにクエリ オプションが適用されたかのように評価する必要があります。次の順序: $format、$inlinecount、$filter、$orderby、$skiptoken、$skip、$top、$expand。

実際には仕様に 1 つまたは 2 つのバグがあると思います (次の仕様更新で対処する必要があります) - 次のコメントを追加しました: How can $inlinecount be effective before $filter, and how can $filter/$orderby be effective before $拡大?

いずれにせよ、仕様がシステム クエリ オプションを順序付けていると想定できます。これは現在、仕様で MUST であるため、OData をサポートすると主張するすべてのサーバーは、$skip または $top の前に $filter を一貫して評価する必要があります。

于 2012-09-21T16:44:55.920 に答える