我有一个 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 的语法等式“1”。
有什么想法吗?
谢谢!
答案 0 :(得分: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)