【问题标题】:oData - how to use filter for specific odata.typeoData - 如何对特定 odata.type 使用过滤器
【发布时间】:2017-09-07 20:09:53
【问题描述】:

我的 oData 查询如下。

http://localhost:21005/api/v1/Devices?$expand=乔布斯

我的 oData JSON 响应(Postman's 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”的所有“Jobs”(“@odata.type”:“#VT.Api.Models.GetDataJob”)。我应该使用哪种过滤器或查询?

【问题讨论】:

    标签: odata


    【解决方案1】:

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

    但正如 Brad 所说,IsOf 尚未在 webapi odata v4 中实现。

    【讨论】:

      【解决方案2】:

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

      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 questionOData Version 4.0 Part 2: URL Conventions

      【讨论】:

        【解决方案3】:

        根据 OData 规范,您应该能够使用“IsOf”函数来完成此操作。但是,我认为这尚未在 WebApi OData v4 中实现(假设您正在使用它):

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多