Подтвердить что ты не робот

Параметры фильтра OData (обрабатывать нулевые или пустые значения)

Мы используем опцию $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 этот параметр?

4b9b3361

Ответ 1

Вы можете сравнить с null с помощью оператора равенства следующим образом:

$filter=CustomerID eq null

В вашем случае запрос будет дегенерировать на что-то вроде:

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

Что должно работать, но это не очень приятно. Вы рассмотрели возможность удаления предиката полностью в этом случае?