OData $filtre avec des éléments dans un $expand
J'ai donné quelques services web pour accéder à des informations.
La première chose que j'ai essaye de développer un nœud . Et je l'ai fait avec succès avec le code suivant
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings
Maintenant, je veux filtre ServiceOfferingID que je vais obtenir lors de l'expansion de ServiceOfferings .
Comment pouvez utiliser l'option de filtre à l'encontre d'une collection étendue
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings&$filter=ServiceOfferings.ServiceOfferingID eq 127
Mais sa ne fonctionne pas. Quelle est la bonne façon de faire de même
- Réponse courte: changer le point pour un slash, c'est à dire
&$filter=ServiceOfferings/ServiceOfferingID eq 127
devrait fonctionner.
InformationsquelleAutor Null Pointer | 2012-02-07
Vous devez vous connecter pour publier un commentaire.
La requête que vous aurez besoin d'écrire dépend de la cardinalité de l'étendue de la collection.
Voici quelques exemples d'utilisation de la public exemple OData les Comptoirs de service, fournies par odata.org.
Une commande est toujours effectuée par exactement un client.
Trouver les commandes d'un client avec un nom spécifique:
http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$expand=Client&$filtre=Client/Société eq 'Vins et d'alcools Chevalier. C'est l'équivalent de la réponse de Dhawal.
Un client peut émettre plusieurs ordres.
Utiliser le les quantificateurs tous ou tout à spécifier si vous voulez au moins un, ou tous les ordres d'obéir à vos conditions.
http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/any(o: o/EmployeeID eq 9)
http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/all(o: o/OrderDate lt DateTime'1997-01-01')
Vous pouvez appeler http://services.odata.org/V3/Northwind/Northwind.svc/$métadonnées et d'inspecter le NavigationProperty éléments, pour voir quelles relations existent.
Ensuite, regardez pour une association avec ce nom et vous trouverez la cardinalité:
La navigation d'un un-à-plusieurs relation comme ceci: http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Commandes&$filtre=Commandes/EmployeeID eq 9, vous donnera: "La mère de la valeur pour l'accès à la propriété d'un bien immobilier "Employé" n'est pas une valeur unique. L'accès à la propriété ne peut être appliqué qu'à une seule valeur."
De la navigation d'une many-to-one relation avec tout ou partie, à l'instar de http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$expand=Customer&$filter=Customer/any(c: c/Société eq 'Vins et d'alcools Chevalier), vous donnera:
"Tout ne peut être utilisé à la suite d'une collection."
Par la voie,
all()
etany()
sont en fait les Quantificateur universel, ∀() et le quantificateur existentiel, ∃(), respectivement, qui vous souvenez peut à partir de la classe de mathématiques.Simple.OData.Client
? Je suis curieux de savoir si un filtrée extension est prise en charge par elle.Filtrage par enfant propriétés de l'objet est pris en charge dans oData.
Voici un exemple:
http://services.odata.org/Northwind/Northwind.svc/Orders?$filtre=Client/Pays eq 'Allemagne'
Simple.OData.Client
?Dans OData la commande Filtre ne fonctionne que sur l'élément de niveau supérieur. Pour votre filtre fonctionne, vous devez avoir l'URL suivante
http://www.example.com/ODataService/WorkService.svc/CaseStudies(x)/ServiceOfferings?format=json&$filter=ServiceOfferingID eq 127
Évidemment, ce n'est pas la requête que vous essayez d'écrire, mais dans les coulisses, votre requête est en cours de conversion à une expression de l'arbre a une racine expression basée sur l'élément de niveau supérieur.
Si vous avez vraiment besoin pour filtrer les données que vous pourriez potentiellement intercepter la requête et d'écrire votre propre expression, comme ci-dessous:
Vous pouvez également procéder par le biais d'un webget sur le service. J'ai eu à faire quelque chose de similaire à filtrer par les propriétés de propriétés.