orderby 参数参考
orderBy (GraphQL) / $orderby (REST) 参数用于定义返回记录的排序规则。支持单字段和多字段排序,每个字段可独立指定升序或降序。
REST:$orderby
语法
?$orderby={field} [asc|desc],{field} [asc|desc],...多字段以逗号分隔。默认方向为升序(asc),可以省略。
示例
bash
# 单字段升序(默认)
curl "http://localhost:5000/api/Book?\$orderby=title"
# 单字段降序
curl "http://localhost:5000/api/Book?\$orderby=year%20desc"
# 多字段:先按年份降序,再按标题升序
curl "http://localhost:5000/api/Book?\$orderby=year%20desc,title%20asc"方向
| 方向 | 说明 |
|---|---|
asc | 升序(默认,可省略) |
desc | 降序(必须显式写出) |
未指定方向时,默认为升序。降序必须显式写 desc。
行为规则
| 规则 | 说明 |
|---|---|
| 多字段排序 | 先按第一个字段排序,值相同时按第二个字段,以此类推 |
| 排序字段不存在 | 400 Bad Request |
| 排序字段被排除 | 400 Bad Request |
| 存储过程 | 不支持 $orderby |
| 视图 | 支持排序,规则与表相同 |
与筛选和分页组合
bash
curl "http://localhost:5000/api/Book?\$filter=year%20ge%202000&\$orderby=pages%20desc&\$first=10"GraphQL:orderBy
语法
graphql
{
books(orderBy: { field: DIRECTION, field: DIRECTION }) {
items { ... }
}
}示例
graphql
# 单字段升序
{ books(orderBy: { title: ASC }) { items { title } } }
# 单字段降序
{ books(orderBy: { year: DESC }) { items { year } } }
# 多字段
{
books(orderBy: { year: DESC, title: ASC }) {
items { id title year }
}
}方向
| 方向 | 说明 |
|---|---|
ASC | 升序(默认,可省略) |
DESC | 降序 |
方向值必须大写。未指定方向默认 ASC。
行为规则
| 规则 | 说明 |
|---|---|
| 多字段排序 | 按对象中的字段顺序依次应用 |
| 排序字段不存在 | 返回 GraphQL 错误 |
| 存储过程 | 不支持 orderBy |
| 关系查询 | 不能对嵌套实体的排序字段使用 orderBy |
REST vs GraphQL 对照
| 操作 | REST | GraphQL |
|---|---|---|
| 单字段升序 | ?$orderby=title | orderBy: { title: ASC } |
| 单字段降序 | ?$orderby=year desc | orderBy: { year: DESC } |
| 多字段 | ?$orderby=year desc,title asc | orderBy: { year: DESC, title: ASC } |
| 默认方向 | 升序 | ASC(等同于升序) |
限定
| 限定 | 说明 |
|---|---|
| 存储过程 | 不支持排序——存储过程不生成分页筛选排序 |
| 聚合查询 | 聚合查询不支持排序——结果只有一行或一个分组数组 |
| 字段名 | 使用 API 层字段名(alias 如已配置),区分大小写 |
排序字段的索引建议
对于高频查询中频繁排序的字段,建议在数据库中创建对应索引以提升性能。多字段排序时,复合索引的效果优于多个单列索引。
