OData过滤器选项(处理null或空值)

Ven*_*nki 23 odata

我们在OData中使用$ filter system query选项来执行过滤器值在运行时发送的过滤器.

作为一个例子,OData URL将是这样的:

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

其中@InCustomerID和@InCountry是等于过滤器的输入值.

在运行时,当用户为客户ID输入一些值(比如说'ABCD')时,我们会用'ABCD'替换@InCustomerID

在运行时,查询将如下所示:

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

在上述情况下,用户输入了以下值:CustomerID =>'ABCD'和Country =>'US'

我的问题是关于在OData $ filter中处理空值.如果用户没有为CustomerID输入任何值,那么我们要选择来自特定国家/地区的所有客户.

在sql的情况下,这将是这样的:

select*from Customers where((CustomerID = @InCustomerID)或(@CustomerID为null))和(Country = @Country).

本质上,如何处理null或空值,以便逻辑条件中的特定谓词始终为true.

OData过滤是否启用此选项?

Vit*_*SFT 30

您可以使用等于运算符与null进行比较,如下所示:

$filter=CustomerID eq null
Run Code Online (Sandbox Code Playgroud)

在您的情况下,查询将退化为:

$filter=(CustomerID eq null) or (null eq null)
Run Code Online (Sandbox Code Playgroud)

哪个应该有效,但不是很好.您是否考虑在这种情况下完全删除谓词?