我们在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)
哪个应该有效,但不是很好.您是否考虑在这种情况下完全删除谓词?
| 归档时间: |
|
| 查看次数: |
48942 次 |
| 最近记录: |