【问题标题】:Odata query filtering first element of a listOdata 查询过滤列表的第一个元素
【发布时间】:2021-02-24 23:09:48
【问题描述】:

我的 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'.

有什么想法吗?

谢谢!

【问题讨论】:

  • 请分享一个示例 URL 并使用 OData 协议版本标记此问题。 OData v4 支持此功能,但与以前的版本不同

标签: odata


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2018-07-14
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多