Параметры фильтра OData (обрабатывают нулевые или пустые значения) - PullRequest
19 голосов
/ 31 января 2011

Мы используем параметр системного запроса $ filter в 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 экв 'ABCD' и эквалайзер 'US'

В приведенном выше случае пользователь ввел следующие значения: CustomerID => 'ABCD' и Country => 'US'

Мой вопрос касается обработки нулевых значений в фильтре OData $. Если пользователь не вводит какое-либо значение для CustomerID, мы хотим выбрать всех клиентов из определенной страны.

В случае sql это будет что-то вроде:

выберите * из Клиентов, где ((CustomerID = @InCustomerID) или (@CustomerID имеет значение null)) и (Страна = @Country).

По сути, как обрабатывать нулевые или пустые значения, чтобы определенный предикат в логическом условии всегда был верным.

Включает ли эта опция фильтрацию OData?

1 Ответ

28 голосов
/ 31 января 2011

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

$filter=CustomerID eq null

В вашем случае запрос выродится в нечто вроде:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...