情報にアクセスするためのWebサービスをいくつか提供しました。
私が持っている最初のものは、ノードを展開しようとします。そして、私はそれを次のコードで成功させました
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings
今、私はServiceOfferingsを展開するときに取得するServiceOfferingIDをフィルタリングしたい。展開されたコレクションに対してフィルターオプションを使用する方法
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings&$filter=ServiceOfferings.ServiceOfferingID eq 127
しかし、機能していません。同じことをする正しい方法は何ですか
子オブジェクトのプロパティによるフィルタリングは、oDataでサポートされています。
以下に例を示します。 http://services.odata.org/Northwind/Northwind.svc/Orders?$filter=Customer/Country eq 'Germany'
ODataでは、Filterコマンドは最上位レベルの要素でのみ機能します。フィルターを機能させるには、次のURLが必要です。
http://www.example.com/ODataService/WorkService.svc/CaseStudies(x)/ServiceOfferings?format=json&$filter=ServiceOfferingID eq 127
明らかに、これは作成しようとしているクエリではありませんが、舞台裏ではクエリがトップレベル要素に基づくルート式を持つ式ツリーに変換されています。
データのフィルタリングが本当に必要な場合は、クエリをインターセプトして、次のように独自の式を作成できます。
[QueryInterceptor("CaseStudies")]
public Expression<Func<CaseStudie, bool>> CaseStudieFilter()
{
<Expression here>
}
また、サービスのWebgetを通じてこれを実現することもできます。プロパティのプロパティによるフィルター処理に似た処理を行う必要がありました。