Microsoft OData无法仅在$ filter(v7)中使用Date

时间:2018-07-02 14:17:06

标签: c# rest api odata

这在Odata v6中有效,但现在在v7中引发错误

$filter=CreateDateUtc gt 2014-06-23

在上面的示例中,CreateDateUtc将为DateTimeOffset。我不确定在破坏了此功能的版本之间有什么变化。

返回的错误是“在URI中指定的查询无效。在类型'Microsoft.OData.Edm.Date'和'System.Nullable`1 [System.DateTimeOffset]之间没有定义强制运算符。” < / p>

我尝试升级到v7.5,但这并不能解决问题。

我可以编写自定义代码来解决此问题,但是我不应该从哪里开始。我尝试使用自定义ODataUriResolver,在其中重写PromoteBinaryOperandTypes方法,但这似乎不起作用。是在修改实际查询的地方创建自定义EnableQueryAttribute的最佳方法吗?

任何指导都将非常有帮助。

1 个答案:

答案 0 :(得分:2)

OData无法将常量转换为日期时间,因为它需要完整的日期时间常量:

$filter=CreateDateUtc gt 2014-06-23T00:00:00Z

或者您可以使用date()函数将属性转换为日期:

$filter=date(CreateDateUtc) gt 2014-06-23