我们在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')时,我们会将@InCustomerID替换为'ABCD'
在运行时,查询将如下:
http://services.odata.org/Northwind/Northwind.svc/Customers?$ filter = CustomerID eq'ABCD'和国家/地区'美国'
在上述情况下,用户输入了以下值:CustomerID => 'ABCD'和国家=> 'US'
我的问题是关于在OData $ filter中处理空值。如果用户没有为CustomerID输入任何值,那么我们希望选择来自特定国家/地区的所有客户。
在sql案例中,这将是:
从Customers中选择*((CustomerID = @InCustomerID)或(@CustomerID为null))和(Country = @Country)。
基本上如何处理null或empty值,以便逻辑条件中的特定谓词始终为true。
OData过滤是否启用此选项?
答案 0 :(得分:27)
您可以使用等于运算符与null进行比较,如下所示:
$filter=CustomerID eq null
在您的情况下,查询将退化为:
$filter=(CustomerID eq null) or (null eq null)
哪个应该有效,但不是很好。 您是否考虑在这种情况下完全删除谓词?