如何解决过滤器返回:属性不是单个值
我想提出OData过滤器选项存在的以下问题。
任何有关解决此问题的想法都将受到高度赞赏。
我的目标是解析JSON格式并仅返回值
“ WorkstationId”:“ 8E5B3291-E092-4091-8C9A-58B7C90E907C”,
我已经创建了以下请求,但它生成了以下错误消息; https://doesnotexist/MyApi/api/v1.0/locations?$ expand = Workstations,AccessDomains,DefaultProfiles&$ filter = Workstations / WorkstationName eq'LP08'
“错误”:{ “ code”:“”, “ message”:“在URI中指定的查询无效。属性'WorkstationName'的属性访问的父值不是单个值。属性访问只能应用于单个值。 >
错误是由我的过滤器选项引起的:
filter = Workstations / WorkstationName eq'LP08'
我的JSON文件;
"@odata.context": "https://doesnotexist/MyApi/api/v1.0/$metadata#locations","value": [
{
"LocationIdInternal": 1,"LocationId": "B9507A00-9057-4CCC-A66B-9AAAB1B6CA5B","DisplayName": "DEFAULT_LOCATION","IsActive": true,"Workstations": [
{
"WorkstationIdInternal": 1,"WorkstationId": "E4FC58FB-7989-4C87-9216-0A3B9F52860E","WorkstationName": "EX08","WorkstationType": "Default"
},{
"WorkstationIdInternal": 2,"WorkstationId": "8E6DB912-F74F-444C-98D6-179747BBDE1A","WorkstationName": "LP08",{
"WorkstationIdInternal": 3,"WorkstationId": "8E5B3291-E092-4091-8C9A-58B7C90E907C","WorkstationName": "OVER77","WorkstationType": "Default"
}
]
}
]
}
解决方法
只需将过滤器放入$ expand中即可
https://doesnotexist/MyApi/api/v1.0/locations?$ expand = Workstations($ filter = WorkstationName eq'LP08'),AccessDomains,DefaultProfiles
这只会扩展具有该名称的工作站
, @phyxius提供的解决方案上的 扩展,因为您正在查询 要仅返回工作站与过滤器匹配的位置,我们需要使用 现在要限制扩展的 使用这两个过滤器的原因是,根级别 只有 我的目标是解析JSON格式并仅返回值 如果只想返回 但是,即使其中只有一个值,它仍将返回嵌套数组中的结果。 如果您只想返回 如果您不需要位置信息,请完全省略expand子句。 Locations
控制器,并且每个位置可以具有许多工作站来将结果集过滤为仅具有旧的名为"LP08"
和的工作站的位置会返回那些也与过滤器匹配的工作站,我们需要在两个地方应用该过滤器:>
Any
运算符:https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations,AccessDomains,DefaultProfiles&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
Workstations
以便只返回匹配的工作站,我们还必须在扩展内部定义$ filter。https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations($filter=WorkstationName eq 'LP08'),DefaultProfiles&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
$filter
选项限制了结果的数量,但不会影响这些结果的 projection 。这与SQL中的WHERE
子句可以引用根本不包含在结果集中的字段的方式几乎相同。$select
和$expand
查询选项会影响结果记录的 projection ,我们可以使用$select
; $filter
; { {1}}甚至嵌套在$orderby
查询选项中的$expand
运算符。
$expand
"WorkstationId": "8E5B3291-E092-4091-8C9A-58B7C90E907C",
值,则删除其他WorkstationId
参数并将$expand
添加到扩展中可能更简单:$select
https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations($filter=WorkstationName eq 'LP08';$select=WorkstationName)&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
{
"@odata.context": "https://doesnotexist/MyApi/api/v1.0/$metadata#locations","value": [
{
"LocationIdInternal": 1,"LocationId": "B9507A00-9057-4CCC-A66B-9AAAB1B6CA5B","DisplayName": "DEFAULT_LOCATION","IsActive": true,"Workstations": [
{
"WorkstationId": "8E6DB912-F74F-444C-98D6-179747BBDE1A"
}
]
}
]
}
结果而不将其包装在某个位置,那么您应该能够查询Workstation
控制器,而不是Workstations
控制器:
这仅在您的模型支持此导航的情况下起作用,但有助于记住“根”项类型必须始终是控制器或函数指定的类型。 Locations
https://doesnotexist/MyApi/api/v1.0/workstations?$expand=Locations&$filter=WorkstationName eq 'LP08'&$select=WorkstationId
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。