【问题标题】:How to use OData $orderby with functions如何将 OData $orderby 与函数一起使用
【发布时间】:2020-04-05 03:00:48
【问题描述】:

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

我有一个表格(以及相关的资源 URL)Contact,每个联系人都有 CompanyNamePersonName。但是在前端却只显示了一个Name

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

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

我还有其他方法可以做这个orderby吗?谢谢。

【问题讨论】:

    标签: c# asp.net odata


    【解决方案1】:

    问题

    如何按一个字段或另一个字段排序?

    假设的答案

    您可以像以前一样在 orderby 中使用表达式,这是一个工作示例:

    https://services.odata.org/V3/Northwind/Northwind.svc/Customers/?$orderby=concat(Phone,Fax)

    但为什么它不起作用?

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

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

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

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

    那么,实用的答案

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

    顺便说一句

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

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多