web-dev-qa-db-ja.com

$ expandのアイテムを持つOData $ filter

情報にアクセスするための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 

しかし、機能していません。同じことをする正しい方法は何ですか

25
Null Pointer

子オブジェクトのプロパティによるフィルタリングは、oDataでサポートされています。

以下に例を示します。 http://services.odata.org/Northwind/Northwind.svc/Orders?$filter=Customer/Country eq 'Germany'

9
Dhawal

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>
}
6
SCB

また、サービスのWebgetを通じてこれを実現することもできます。プロパティのプロパティによるフィルター処理に似た処理を行う必要がありました。

0
George