http://localhost:21005/api/v1/Devices?$扩大=工作
{
"@odata.context": "http://localhost:21005/api/v1/$metadata#Devices",
_"value": [
{
"Id": "abc03c74-8697-49ec-85e6-6444112d0336",
"TimeOffset": 0,
"TimeOffsetMode": "Unmanaged",
"Jobs": [
{
"@odata.type": "#VT.Api.Models.GetDataJob",
"Id": "ba07d50a-f17d-4c65-b3cf-f3e03d1ba1cf"
},
{
"@odata.type": "#VT.Api.Models.GetDataProfilerJob",
"Id": "5aa9c046-e4f2-44de-b932-16c06b86b084"
},
{
"@odata.type": "#VT.Api.Models.GetDeviceConfigurationJob",
"Id": "d7dc0ac5-1f89-4356-aaa8-9ac40353e1af"
}
}
{
"Id": "d42ac1f0-1261-4100-8391-013a226ff25f",
"TimeOffset": 0,
"TimeOffsetMode": "Unmanaged",
"Jobs": [ ]
}
}
现在,我想查询特定的" @ oData.type" 例如,我只想要所有" Jobs"其数据类型为"#VT.Api.Models.GetDataJob" (" @ odata.type":" #VT.Api.Models.GetDataJob")。我应该使用什么样的过滤器或查询?
答案 0 :(得分:1)
根据当前规范,正确的方法是将类型过滤器应用于扩展表达式,例如:
http://host/service/Orders?$expand=Customer/Model.VipCustomer
或者,使用您的示例,
http://localhost:21005/api/v1/Devices?$expand=Jobs/VT.Api.Models.GetDataJob
请注意,这将返回所有设备,展开其Jobs
关联,并仅将GetDataJob
个实例添加到生成的关联集中。如果您只想查询拥有 GetDataJob
个实例的设备,则需要查看是否可以将lambdas与类型过滤器一起使用。
另请参阅this SO question和OData Version 4.0 Part 2: URL Conventions
答案 1 :(得分:0)
根据OData规范,您应该能够使用“IsOf”功能来完成此任务。但是,我不相信这已经在WebApi OData v4中实现(假设你正在使用它):
答案 2 :(得分:0)
查询应该是: ?http://localhost:21005/api/v1/Devices $扩大=作业($滤波器= ISOF(' VT.Api.Models.GetDataJob'))
但正如Brad所说,IsOf尚未在webapi odata v4中实现。