odata - Odata 查询过滤列表的第一个元素
问题描述
我有一个 OData 查询工作正常,返回给我类似:
[
{
"Id": "ABC",
"Related": {
"Id": "123"
},
"Children": [
{
"Id": "1"
},
{
"Id": "2"
}
]
},
{
"Id": "DEF",
"Related": {
"Id": "123"
},
"Children": [
{
"Id": "3"
},
{
"Id": "4"
}
]
}
]
我想过滤每个对象的第一个孩子。我对值或相关(1-1 关系)进行过滤没有问题,但我找不到过滤第一个孩子(0-N 关系)的方法。
为了过滤 1-1 实体,我使用Related/Id eq '123'进行过滤,但我找不到类似于Children[0]/Id eq '1'的语法。
任何想法?
谢谢!
解决方案
在 OData v4 中,您将$top
在$expand
选项内使用:
/odata/resources?$expand=Related,Children($top=1)
但是,当您使用 $top 限制结果时,您应该始终指定排序顺序,此示例使用 Id 降序只是为了您可以看到语法
/odata/resources?$expand=Related,Children($top=1;$orderby=Id desc)
您还可以使用 $filter 在子项中按 id 获取特定记录,
如果您在外部节点上使用了过滤器,则基于子节点的存在,如果您不想看到其他子节点,您还需要将相同(或类似)过滤器表达式应用于扩展节点:
/odata/resources?$filter=Children/any(x:x/Id eq 4)&$expand=Related,Children($filter=Id eq 4)
推荐阅读
- sql-server - 如何总结 SQL Server 数据库中给定日期的 **ALL** 值?
- android - 如何在子 POJO 中使用 @Bindable?
- asp.net-web-api - 通过 FireBase 触发从 ASP.Net Api 到 Xamarin.Android 应用程序的推送通知
- sql - 如何在查询之间设置多个
- maven - 如何在大型多模块项目上进行增量 Jenkins Maven 构建
- python-3.x - Django - 为什么迁移命令不起作用?
- algorithm - n*n 矩阵乘法需要多少步?
- android - 打开使用下载管理器下载的文件 Android
- swift - 无法连接页面视图控制器上的按钮并使用按钮滑动到下一个屏幕
- wpf - WPF - 如何使用代码创建 3D 模型(类似于旧的 Autocad)