Мы используем опцию $filter system query в OData для выполнения фильтров, где значение фильтра отправляется во время выполнения.
В качестве примера URL-адрес OData будет выглядеть следующим образом:
http://services.odata.org/Northwind/Northwind.svc/Customers? $filter = CustomerID eq @InCustomerID и Country eq @InCountry
где @InCustomerID и @InCountry - это входные значения для равного фильтра.
Во время выполнения, когда пользователь вводит некоторое значение для идентификатора клиента (например, "ABCD" ), мы заменили бы @InCustomerID на "ABCD"
Во время выполнения запрос будет выглядеть следующим образом:
http://services.odata.org/Northwind/Northwind.svc/Customers? $filter = CustomerID eq 'ABCD' и Country eq 'US'
В приведенном выше случае пользователь ввел следующие значения: CustomerID = > 'ABCD' и Country = > 'US'
Мой вопрос касается обработки нулевых значений в OData $filter. Если пользователь не вводит какое-либо значение для CustomerID, мы хотим выбрать всех клиентов из конкретной страны.
В sql случае это будет примерно так:
выберите * из клиентов, где ((CustomerID = @InCustomerID) или (@CustomerID равно null)) и (Страна = @Country).
По существу, как обрабатывать нулевые или пустые значения, так что конкретный предикат в логическом условии всегда будет истинным.
Включает ли фильтрация OData этот параметр?