如何将OData$orderby与函数一起使用



我使用OData v3.0通过Rest API从后端服务器查询数据。

我有一个表(和相关的资源URL(Contact,每个联系人都有CompanyNamePersonName。然而在前端却只显示了一个Name

我想实现的是$orderby这两个字段,以可用的为准。一种可能的方法是连接这两个字段,例如$orderby=concat(CompanyName,PersonName),但我得到了这个错误

请检查您的OData查询:对于非基元集合,仅支持按根级别的属性排序。不支持嵌套的属性和表达式。

我还有其他方法可以完成订单吗?谢谢

问题

如何通过一个字段或另一个字段进行订购?

假设答案

您可以在orderby中使用表达式,正如您所做的那样,这里有一个工作示例:

https://services.odata.org/V3/Northwind/Northwind.svc/Customers/?$orderby=concat(电话、传真(

但为什么它不起作用

根据ODATA规范,这应该是可行的,但事实是,大多数后端实现并不完全符合规范。这是很正常的事情。

我知道的许多后端实现都不支持orderby中的嵌套属性或表达式。

尤其是当后端由基于关系数据库的系统(旧的SAP系统、NAV或AX系统(提供时,他们往往不支持它,主要是因为他们想直接将查询推送到数据库,或者直到今天都没有实现它。

您永远不能假设后端完全实现了整个ODATA规范,大多数时候,后端只实现了迄今为止所需的内容。

因此,实际答案

这不是ODATA规范问题。你的方法是正确的。相反,您有一个未完全实现的后端。您唯一的解决方案是要求他们实现它,或者在客户端处理它。

顺便说一下

ODATA v3是一个非常奇怪且很少受支持的ODATA版本。通常,现在有ODataV2或ODataV4。

最新更新