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?
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?