web-dev-qa-db-fra.com

Options de filtre OData (gérer les valeurs nulles ou vides)

Nous utilisons l'option de requête système $ filter dans OData pour exécuter des filtres où la valeur du filtre est envoyée au moment de l'exécution.

Par exemple, l'URL OData serait comme ceci:

http://services.odata.org/Northwind/Northwind.svc/Customers ? $ filter = CustomerID eq @InCustomerID et Country eq @InCountry

où @InCustomerID & @InCountry sont les valeurs d'entrée pour le filtre égal.

Au moment de l'exécution, lorsque l'utilisateur entre une valeur pour l'ID client (par exemple, "ABCD"), nous remplaçons @InCustomerID par "ABCD"

Au moment de l'exécution, la requête serait la suivante:

http://services.odata.org/Northwind/Northwind.svc/Customers ? $ filter = CustomerID eq 'ABCD' et Country eq 'US'

Dans le cas ci-dessus, l'utilisateur a entré les valeurs suivantes: CustomerID => 'ABCD' et Country => 'US'

Ma question concerne la gestion des valeurs nulles dans le filtre OData $. Si l'utilisateur ne saisit aucune valeur pour CustomerID, nous voulons sélectionner tous les clients d'un pays spécifique.

Dans le cas sql, ce serait quelque chose comme:

sélectionnez * parmi les clients où ((CustomerID = @InCustomerID) ou (@CustomerID est null)) et (Country = @Country).

Essentiellement, comment gérer les valeurs nulles ou vides afin que le prédicat spécifique dans la condition logique soit toujours vrai.

Le filtrage OData active-t-il cette option?

23
Venki

Vous pouvez comparer à null en utilisant l'opérateur d'égalité comme ceci:

$filter=CustomerID eq null

Dans votre cas, la requête dégénérerait en quelque chose comme:

$filter=(CustomerID eq null) or (null eq null)

Ce qui devrait fonctionner, mais ce n'est pas très agréable. Avez-vous envisagé de supprimer complètement le prédicat dans ce cas?

30
Vitek Karas MSFT