首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按嵌套集合排序过滤计数

按嵌套集合排序过滤计数
EN

Stack Overflow用户
提问于 2021-12-04 21:29:39
回答 1查看 448关注 0票数 3

我试图通过嵌套集合进行排序,筛选计数,但无法在OData中找到如何进行排序。

我将使用公共OData API (来自Microsoft)作为演示来解释我的意思,不需要授权。

代码语言:javascript
运行
复制
https://services.odata.org/TripPinRESTierService/

所以我们有People在那里

代码语言:javascript
运行
复制
https://services.odata.org/TripPinRESTierService/People

这些PeopleTrips

代码语言:javascript
运行
复制
https://services.odata.org/TripPinRESTierService/People?$expand=Trips

如果我想通过Trips通过Name过滤,这很容易

代码语言:javascript
运行
复制
https://services.odata.org/TripPinRESTierService/People?$expand=Trips($filter=Name eq 'Trip in Beijing')

如果我想按People计数订购Trip,也很容易

代码语言:javascript
运行
复制
https://services.odata.org/TripPinRESTierService/People?$expand=Trips($count=true)&$orderby=Trips/$count desc

但我无法通过过滤后的次数来订购(比如$expand=Trips($filter=Name eq 'Trip in Beijing'))

代码语言:javascript
运行
复制
https://services.odata.org/TripPinRESTierService/People?$expand=Trips($count=true;$filter=Name eq 'Trip in Beijing')&$orderby=Trips/$count desc

类似于&$orderby=Trips($filter=Name eq 'Trip in Beijing')/$count desc&$orderby=Trips/$count($filter=Name eq 'Trip in Beijing') desc的东西不起作用(给出服务器错误"Could not find a property named 'Name' on type 'Trippin.Person'.")。

此URL的版本以查看最低要求的数据

代码语言:javascript
运行
复制
https://services.odata.org/TripPinRESTierService/People?$expand=Trips($top=0;$count=true;$filter=Name eq 'Trip in Beijing')&$orderby=Trips/$count desc&$select=Trips

更新:在我的项目中使用Microsoft.AspNetCore.OData版本7.5.7,它依赖于Microsoft.OData.Core版本7.7.3 (它没有显式安装)。如果微软将在其API中升级OData版本,它可能也会起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-11 19:44:39

更新只支持基于这个公关的Microsoft.OData.Core版本>= 7.9.4。

您应该能够在$orderby中重复您在$expand中具有的相同的筛选条件,以获得您要寻找的内容。

代码语言:javascript
运行
复制
/odata/People?$expand=Trips($count=true;$filter=Name eq 'Paris')&$orderby=Trips/$count($filter=Name eq 'Paris') desc
代码语言:javascript
运行
复制
{
"@odata.context": "https://localhost:5001/odata/$metadata#People(Trips())",
"value": [
    {
        "Id": "d31713ca-236b-470f-bb9e-f5bd6fac3d8e",
        "Name": "Aaron",
        "Trips@odata.count": 2,
        "Trips": [
            {
                "Id": "741656bf-f5e6-4f18-855f-ca1b3c0eb478",
                "Name": "Paris"
            },
            {
                "Id": "741656bf-f5e6-4f18-855f-ca1b3c0eb478",
                "Name": "Paris"
            }
        ]
    },
    {
        "Id": "34c0ac10-1c0d-4a29-89ad-386a3fea893b",
        "Name": "Bob",
        "Trips@odata.count": 1,
        "Trips": [
            {
                "Id": "1b35a96d-ca98-438a-b63c-1478ae0661cb",
                "Name": "Paris"
            }
        ]
    },
    {
        "Id": "192dd197-6f25-4842-bb9f-207b5df221c2",
        "Name": "Jeff",
        "Trips@odata.count": 0,
        "Trips": []
    }
  ]
}

比较而言,这里是没有$filter的相同数据集。

代码语言:javascript
运行
复制
/odata/People?$expand=Trips($count=true)&$orderby=Trips/$count desc
代码语言:javascript
运行
复制
{
"@odata.context": "https://localhost:5001/odata/$metadata#People(Trips())",
"value": [
    {
        "Id": "192dd197-6f25-4842-bb9f-207b5df221c2",
        "Name": "Jeff",
        "Trips@odata.count": 3,
        "Trips": [
            {
                "Id": "4537521c-27a6-4fa4-8bb5-fd94937abd56",
                "Name": "Cleveland"
            },
            {
                "Id": "40431cba-0d8f-470a-9647-bdd99009737a",
                "Name": "Cleveland"
            },
            {
                "Id": "1269c3e3-b5ff-4a73-8201-5388d00ea744",
                "Name": "Cleveland"
            }
        ]
    },
    {
        "Id": "d31713ca-236b-470f-bb9e-f5bd6fac3d8e",
        "Name": "Aaron",
        "Trips@odata.count": 2,
        "Trips": [
            {
                "Id": "741656bf-f5e6-4f18-855f-ca1b3c0eb478",
                "Name": "Paris"
            },
            {
                "Id": "741656bf-f5e6-4f18-855f-ca1b3c0eb478",
                "Name": "Paris"
            }
        ]
    },
    {
        "Id": "34c0ac10-1c0d-4a29-89ad-386a3fea893b",
        "Name": "Bob",
        "Trips@odata.count": 1,
        "Trips": [
            {
                "Id": "1b35a96d-ca98-438a-b63c-1478ae0661cb",
                "Name": "Paris"
            }
        ]
    }
  ]
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70229635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档