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

时间:2011-01-31 01:49:38

标签: 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')时,我们会将@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过滤是否启用此选项?

1 个答案:

答案 0 :(得分:27)

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

$filter=CustomerID eq null

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

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

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