oData-如何对特定的oData.type使用筛选器

  • 本文关键字:type 筛选 oData oData- odata
  • 更新时间 :
  • 英文 :


我的oData查询如下

http://localhost:21005/api/v1/Devices?$expand=工作

我的oData JSON响应(Postman的Pretty格式)如下

{
"@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"例如,我只想要所有数据类型为"#VT.Api.Models.GetDataJob"("@odata.type":"#VT.Api.Models.cetDataJob")的"作业"。我应该使用什么样的过滤器或查询?

查询应该是:http://localhost:21005/api/v1/Devices?$expand=作业($filter=isof("VT.Api.Models.GetDataJob")

但正如Brad所说,IsOf还没有在webapi odata v4中实现。

根据当前规范,正确的方法是对展开表达式应用类型过滤器,例如:

http://host/service/Orders?$expand=Customer/Model.VipCustomer

或者,以为例

http://localhost:21005/api/v1/Devices?$expand=Jobs/VT.Api.Models.GetDataJob

请注意,这将返回所有设备,扩展其Jobs关联,并仅将GetDataJob实例添加到生成的关联集。如果您只想查询具有GetDataJob实例的设备,则需要查看是否可以将lambdas与类型筛选器一起使用。

另请参阅此SO问题和OData 4.0版第2部分:URL约定

根据OData规范,您应该能够使用"IsOf"函数来实现这一点。然而,我认为这还没有在WebApi OData v4中实现(假设这就是你正在使用的):

https://github.com/OData/WebApi/issues/185

相关内容

最新更新