【问题标题】:how to properly use OData v4 DataTimeOffset with query fileters?如何正确使用 OData v4 DateTimeOffset 和查询过滤器?
【发布时间】:2016-05-11 08:07:48
【问题描述】:

我有一个 OData v4 WebAPI 2 端点:

http://windows-10:8888/Incident

此端点需要支持对 DateTime 字段的过滤:

http://windows-10:8888/Incident?$filter=REPORTEDDATE gt DateTimeOffset'2016-05-10%2016:01:53.000'

当我运行这个时,我得到这个错误:

     "The query specified in the URI is not valid. 
    Unrecognized 'Edm.String' literal 'DateTimeOffset'2016-05-10 16:01:53.000'' 
at '16' in 'REPORTEDDATE gt DateTimeOffset'2016-05-10 16:01:53.000''."

使用 OData v4 完成此类 DateTime 过滤的正确技术是什么?

【问题讨论】:

    标签: odata


    【解决方案1】:

    根据规范,http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html 第 5.1.1.6.1 节示例:

    http://localhost:23890/People?$expand=Trips($filter=StartsAt%20eq%202014-01-01T01:00:00-08:00) 或http://localhost:23890/People?$expand=Trips($filter=StartsAt%20eq% 202014-01-01T01:00:00.000-08:00) 或 http://localhost:23890/People?$expand=Trips($filter=StartsAt%20eq%202014-01-01T01:00:00Z)

    我已经验证了 Web APi OData 或 REStier,效果很好。

    【讨论】:

      【解决方案2】:

      在这里找到正确的语法:http://stackoverflow.com/questions/28586797/the-binary-operator-lessthan-is-not-defined-for-the-types-system-nullable1sys

      在我的例子中,语法是:

      http://windows-10:8888/Incident?$filter=cast(REPORTEDDATE,%27Edm.DateTimeOffset%27)%20gt%20%202016-05-10T22:38:00.000Z
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多