我有一个OData查询工作正常,返回我类似:
[
{
"Id": "ABC",
"Related": {
"Id": "123"
},
"Children": [
{
"Id": "1"
},
{
"Id": "2"
}
]
},
{
"Id": "DEF",
"Related": {
"Id": "123"
},
"Children": [
{
"Id": "3"
},
{
"Id": "4"
}
]
}
]
我想过滤每个对象的第一个子对象。我对值或Related(1-1关系)进行过滤没有问题,但我找不到对第一个子(0-N关系)进行过滤的方法。
要过滤1-1实体,我使用相关/Id eq '123'进行过滤,但我找不到类似于Children[0]/Id eq '1'的语法.
任何想法?
谢谢!
在OData v4中,您将在$expand
选项中使用$top
:
/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)