使用 OData 查询选项
OData 允许您使用 OData URI 中的筛选表达式来限制所返回的结果、基于特定字段筛选结果、对结果进行排序等。
您可以为 OData URI 提供特定的查询参数。 所有查询参数都以美元符号 ($) 开头。 要开始指定查询参数,请提供问号 (?) 和不同的查询参数。 查询参数需要使用与号 (&) 进行分隔。
选择一个字段子级
如果您要使用 OData 检索记录,但不需要记录集中定义的所有字段,可使用 $select 筛选表达式。 通过 $select,您可以指定要从记录集中检索的字段。 请务必谨慎使用筛选表达式中的字段,因为这些字段区分大小写。
在以下示例中,选择了物料记录集中的编号、说明和单价字段。 select 关键字前的美元符号非常重要,如果没有本符号,命令将无法工作。
/Items?$select=No,Description,Unit_Price
对结果集排序
要对结果集排序,您可以使用 $orderby 筛选表达式。 筛选表达式均在服务器级别运行,这将提高您通过 OData 调用检索的结果集的性能。
使用 orderby 关键字时,您可以通过输入 asc(表示升序,这是默认设置)或 desc(表示降序),来指定排序方向。
在以下示例中,基于单价字段对结果集按 orderby 进行排序。 您在 orderby 筛选表达式中使用的字段不需要作为 select 筛选表达式的一部分。
/Items?$select=No,Description,Unit_Price&$orderby=Unit_Price desc
对结果集进行限制
要检索特定数量的记录,可使用 $top 筛选表达式。 本表达式可与 $skip 筛选表达式结合使用来获取一定数量的后续记录。
在随后的示例中,将跳过前 10 条记录并返回后面的 5 条记录。
/Items?$select=No,Description,Unit_Price&$top=5&$skip=10
筛选结果集
您可以筛选结果集,以仅检索一个或多个字段符合 $filter 筛选表达式中指定的条件的记录。
以下示例检索库存小于 3000 且基础度量单位不为 PCS 的所有记录。
/Items?$filter=Inventory lt 3000 and Base_Unit_of_Measure ne 'PCS'
您可以使用与关键字和或关键字指定多个字段。 使用以下表达式指定条件:
lt - 小于
gt - 大于
eq - 等于
ne - 不等于
le - 小于或等于
ge - 大于或等于
filter 表达式也可以用于 FlowFilter 字段中。 依赖于已筛选的 FlowFilter 的 FlowFields 将重新进行计算。
在随后的示例中,Location_Filter 字段为 FlowFilter。 本 FlowFilter 用在 Inventory 字段(即 FlowField)的计算中。
/Items?$select=No,Inventory$filter=Location_Filter eq 'GREEN'
获取行明细
对于某些记录集,您可以请求额外的详细信息。 在以下示例中,请求了所有 SalesOrders。 但是,在本示例中,您要检索具有相同请求的对应 SalesLines。 要完成本任务,请使用 $expand 筛选表达式。 如果 EDM 单据显示实体的 NavigationProperty,则您可以使用 $expand 筛选器。
以下示例显示了正在请求的所有对应 SalesLines。
/SalesOrders?$expand=SalesOrderSalesLines
您也可以使用 $filter 筛选表达式对 SalesLines 进行筛选。
/SalesOrders?$expand=SalesOrderSalesLines($filter=No eq '1920-S')