Question

Je suis en train de créer un appel au service Web OData qui ne sélectionner que des valeurs distinctes de certains biens. Est-il un bon exemple de la façon de le faire?

Était-ce utile?

La solution

Actuellement, le protocole OData ne supporte pas l'opérateur distinct, ou tout autre opérateur qui aiderait à cette requête (en supposant que vous êtes à la recherche des valeurs disctinct d'une propriété primitive sur une entité). Vous devriez être en mesure de contourner ce en mettant en œuvre une opération de service sur le serveur qui effectue cette requête sur le fournisseur sous-jacent qui a généralement cette capacité. Et le client peut appeler au lieu que le fonctionnement du service.

Autres conseils

Note: Je sais c'est vieux, mais apparaît toujours dans les réponses de recherche. Il y a maintenant une bonne solution à ce problème.

Dans OData v4, il y a un soutien pour appliquer sur $, entre autres, $apply peut être utilisé pour retourner un ensemble distinct de champs d'un jeu de résultats.

  

Voir discussion à ce sujet: Application Distinct à ODataQuery

     

de la OData spec v4 ,
  L'option de requête $apply prend une séquence de transformations ensemble, séparés par des barres obliques pour exprimer qu'elles sont appliquées de façon consécutive, par exemple, le résultat de chaque transformation est l'entrée à la transformation suivante   $ Appliquer est une fonction qui nécessite

tl; dr; En gros, si j'ai une table qui a de nombreux domaines, mais je veux revenir juste les dossiers distincts d'un certain nombre de champs spécifiques de la première étape consiste à identifier les colonnes distinctes, permet de les appeler Name et Id.
Il suffit d'utiliser la fonction $apply pour obtenir un ensemble distinct de résultats contenant juste les noms et les colonnes Id avec la syntaxe comme ceci:

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

permet de le faire par exemple, TuberInspections a 1000s de lignes, mais seulement quelques entrepreneurs, je veux afficher les noms des entrepreneurs dans une liste déroulante à utiliser dans une requête de filtrage.

Mes colonnes distinctes sont ContractorName et 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"
            }
        ]
    }

Si votre structure de données ne suffit à plat, il y a un soutien OOTB limité pour récupérer des structures simples résultats imbriqués.

  

Si sa structure de données est difficile à consommer et vous avez le contrôle de l'API, alors vous devriez envisager de créer une fonction personnalisée pour retourner le jeu d'enregistrements spécifiques que vous désirez, qui est un exercice trivial qui a beaucoup de différentes options disponibles pour vous, mais en dehors de la portée de cette réponse.

     
    

Cette réponse est dirigée sur la façon d'interroger un service OData existant pour des valeurs distinctes, pas comment modifier un service pour fournir ces informations.

  

Actuellement, seul un chemin de navigation unique est pris en charge avec la syntaxe suivante. La requête ci-dessus peut également être écrit:

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
                 }
             }
         ]
    } 

Il y a plus de variations avancées (compliquées) à des transformations $apply imbriquées ou empilées qui incluent le retour d'un décompte du nombre de lignes uniques qui correspondent à chacun des résultats distincts.

Pour plus d'informations questions spécifiques poste et étiquette avec OData-v4 et vous trouverez toute l'aide dont vous avez besoin:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top