Json 筛选器返回:属性不是单个值
我想提出以下关于OData过滤器选项的问题 任何关于如何解决这个问题的想法都将受到高度赞赏 我的目标是解析JSON格式并只返回值 “工作站ID”:“8E5B3291-E092-4091-8C9A-58B7C90E907C” 我创建了以下请求,但它生成了以下错误消息强> https://doesnotexist/MyApi/api/v1.0/locations?$expand=工作站、访问域、默认配置文件和$filter=工作站/工作站名称eq'LP08' “错误”:{ “代码”:“, “消息”:“URI中指定的查询无效。属性“WorkstationName”的属性访问的父值不是单个值。属性访问只能应用于单个值。” 错误是由我的筛选选项引起的: 过滤器=工作站/工作站名称eq“LP08” 我的JSON文件;Json 筛选器返回:属性不是单个值,json,odata,Json,Odata,我想提出以下关于OData过滤器选项的问题 任何关于如何解决这个问题的想法都将受到高度赞赏 我的目标是解析JSON格式并只返回值 “工作站ID”:“8E5B3291-E092-4091-8C9A-58B7C90E907C” 我创建了以下请求,但它生成了以下错误消息 https://doesnotexist/MyApi/api/v1.0/locations?$expand=工作站、访问域、默认配置文件和$filter=工作站/工作站名称eq'LP08' “错误”:{ “代码”:“, “消息”:“U
"@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",
"WorkstationType": "Default"
},
{
"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 这将仅扩展具有该名称的工作站在@physius提供的解决方案上扩展,因为您正在查询
位置
控制器,并且每个位置可以有多个工作站,以仅将结果集筛选到具有名为的工作站的位置
要返回与过滤器匹配的工作站,我们需要在两个位置应用过滤器:
Any
操作符:
https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations,AccessDomains,DefaultProfiles&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
工作站
,以便只返回匹配的工作站,我们还必须在扩展中定义$filter
https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations($filter=WorkstationName eq 'LP08'),AccessDomains,DefaultProfiles&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
$filter
选项限制结果的数量,但它不影响这些结果的投影。这与SQL中的WHERE
子句可以引用结果集中根本不包含的字段的方式非常相似
只有$select
和$expand
查询选项影响结果记录的投影,我们可以使用$select
;$filter
;$orderby
甚至在$expand
查询选项中嵌套$expand
运算符
我的目标是解析JSON格式并只返回值
"WorkstationId": "8E5B3291-E092-4091-8C9A-58B7C90E907C",
如果您只想返回WorkstationId
值,则删除其他$expand
参数并将$select
添加到扩展中可能更简单:
但是,这仍然会在嵌套数组中返回结果,即使其中只有一个值
{
“@odata.context”:”https://doesnotexist/MyApi/api/v1.0/$metadata#位置“,
“价值”:[
{
“位置内部”:1,
“位置ID”:“B9507A00-9057-4CCC-A66B-9AAB1B6CA5B”,
“显示名称”:“默认位置”,
“IsActive”:是的,
“工作站”:[
{
“工作站ID”:“8E6DB912-F74F-444C-98D6-179747BDE1A”
}
]
}
]
}
如果您只想返回工作站
结果而不将其包装在某个位置,那么您应该能够查询工作站
控制器,而不是位置
一个:这只适用于您的模型支持此导航,但有助于记住“根”项类型必须始终是控制器或函数指定的类型
{
“@odata.context”:”https://doesnotexist/MyApi/api/v1.0/$metadata#工作站“,
“价值”:[
{
“工作站ID”:“8E6DB912-F74F-444C-98D6-179747BDE1A”,
“地点”:[
{
“位置内部”:1,
“位置ID”:“B9507A00-9057-4CCC-A66B-9AAB1B6CA5B”,
“显示名称”:“默认位置”,
“IsActive”:正确
}
]
}
]
}
如果不需要位置信息,请完全省略EXPLAND子句
https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations($filter=WorkstationName eq 'LP08';$select=WorkstationName)&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
https://doesnotexist/MyApi/api/v1.0/workstations?$expand=Locations&$filter=WorkstationName eq 'LP08'&$select=WorkstationId