質問

いくつかのプロパティの個別の値のみを選択する odata Web サービスへの呼び出しを作成しようとしています。これを行う方法の良い例はありますか?

役に立ちましたか?

解決

現在のODataプロトコルは、異なる事業者、またはそのようなクエリで役立つだろう、他のオペレータ(あなたには、いくつかのエンティティのプリミティブプロパティのdisctinct値を探していると仮定)をサポートしていません。 あなたは通常、その能力を持っている根本的なプロバイダで、このようなクエリを実行し、サーバー上のサービス操作を実装することによってこの問題を回避することができるはずです。そして、クライアントは、代わりにそのサービス操作を呼び出すことができます。

他のヒント

注記: これが古いことはわかっていますが、今でも検索応答に表示されます。この問題には現在、優れた解決策があります。

OData v4 では、次のサポートがあります。 $適用, 、 そのことなど、 $apply 結果セットから個別のフィールド セットを返すために使用できます。

関連するディスカッションを参照してください。 ODataQuery への Distinct の適用

から OData v4 の仕様,
クエリオプション $apply 連続して適用されることを表すためにスラッシュで区切られた一連のセット変換を受け取ります。各変換の結果は、次の変換への入力です$ applyは必要な関数です

tl;dr;
基本的に、テーブルに多くのフィールドがあるが、多数の特定のフィールドの個別のレコードだけを返したい場合、最初のステップは個別の列を識別し、それらを呼び出します。 Name そして Id.
単純に使用してください $apply 次のような構文を使用して、Names 列と Id 列だけを含む個別の結果セットを取得する関数を使用します。

http://url.to/tableresource?$apply=groupby((Name,Id))

例としてこれをやってみましょう。 TuberInspections には数千の行がありますが、請負業者の数はわずかです。フィルタリング クエリで使用するために請負業者の名前をドロップダウン リストに表示したいと考えています。

私の特徴的なコラムは、 ContractorName そして ContractorId

GET /odata/TuberInspections?$apply=groupby((ContractorName,ContractorId)) HTTP/1.1
Host: localhost:1230

Response:
    { 
        "@odata.context": "http://localhost:1230/odata/$metadata#TuberInspections(ContractorName,ContractorId)",
        "value": [
            {
                "@odata.id": null,
                "ContractorId": 11534,
                "ContractorName": "Kermit d'Frog"
            },
            {
                "@odata.id": null,
                "ContractorId": 11539,
                "ContractorName": "Carlos Spicy Wiener"
            },
            {
                "@odata.id": null,
                "ContractorId": 16827,
                "ContractorName": "Jen Gelfling"
            }
        ]
    }

データ構造が十分にフラットではない場合、単純なネストされた結果構造を取得するための OOTB サポートが制限されます。

データ構造が利用しにくく、API を制御できる場合は、必要な特定のレコードセットを返すカスタム関数を作成することを検討する必要があります。これは、さまざまなオプションが利用できる簡単な作業ですが、この応答の範囲。

この応答は、既存の OData サービスに固有の値をクエリする方法を対象としたものであり、そのような情報を提供するためにサービスを変更する方法を対象としたものではありません。

現在、次の構文では 1 つのナビゲーション パスのみがサポートされています。上記のクエリは次のように書くこともできます。

GET /odata/TuberInspections?$apply=groupby((Contractor/EntityID,Contractor/Initials))
Host: localhost:1230

Response:
    { 
         "@odata.context": "http://localhost:1230/odata/$metadata#TuberInspections(Contractor(EntityID,Initials))",
         "@odata.count": 3,
         "value": [
             {
                 "@odata.id": null,
                 "Contractor": {
                     "@odata.id": null,
                     "Initials": "KdF",
                     "EntityID": 11534
                 }
             },
             {
                 "@odata.id": null,
                 "Contractor": {
                     "@odata.id": null,
                     "Initials": "SW",
                     "EntityID": 11539
                 }
             },
             {
                 "@odata.id": null,
                 "Contractor": {
                     "@odata.id": null,
                     "Initials": "Jen",
                     "EntityID": 16827
                 }
             }
         ]
    } 

ネストまたはスタックには、より高度な (複雑な) バリエーションがあります。 $apply 変換には、個別の結果のそれぞれに対応する一意の行数のカウントを返すことが含まれます。

詳細については、具体的な質問を投稿し、OData-v4 でタグ付けしてください。必要なすべてのヘルプが見つかります :)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top