繁体   English   中英

在Microsoft.OData.Edm.Date和System.Nullable System.DateTimeOffset类型之间没有定义强制运算符。

[英]No coercion operator is defined between types Microsoft.OData.Edm.Date and System.Nullable System.DateTimeOffset

我们正在构建一个odata webservice并面临转换问题。

使用以下odata查询网址:

"http://some.url.ext/test/endPoint?$filter=SomeDate ge 1990-01-01"

在我们的odata-filtered枚举中,SomeDate是Nullable<DateTime> DateTime?

然而,看起来odata控制器在Nullable<DateTimeOffset> DateTimeOffset?

然后抱怨它无法比较Microsoft.OData.Edm.DateSystem.Nullable System.DateTimeOffset

错误是:

URI中指定的查询无效。 类型'Microsoft.OData.Edm.Date'和'System.Nullable`1 [System.DateTimeOffset]'之间没有定义强制运算符。

No coercion operator is defined between types 'Microsoft.OData.Edm.Date' and 'System.Nullable`1[System.DateTimeOffset]'.

System.InvalidOperationException at System.Linq.Expressions.Expression.GetUserDefinedCoercionOrThrow(ExpressionType coercionType, Expression expression, Type convertToType)
       at System.Linq.Expressions.Expression.Convert(Expression expression, Type type, MethodInfo method)
       at System.Web.OData.Query.Expressions.ExpressionBinderBase.CreateConvertExpression(ConvertNode convertNode, Expression source)
       at System.Web.OData.Query.Expressions.FilterBinder.BindConvertNode(ConvertNode convertNode)
       at System.Web.OData.Query.Expressions.FilterBinder.Bind(QueryNode node)
       at System.Web.OData.Query.Expressions.FilterBinder.BindBinaryOperatorNode(BinaryOperatorNode binaryOperatorNode)
       at System.Web.OData.Query.Expressions.FilterBinder.Bind(QueryNode node)
       at System.Web.OData.Query.Expressions.FilterBinder.BindExpression(SingleValueNode expression, RangeVariable rangeVariable, Type elementType)
       at System.Web.OData.Query.Expressions.FilterBinder.BindFilterClause(FilterBinder binder, FilterClause filterClause, Type filterType)
       at System.Web.OData.Query.Expressions.FilterBinder.Bind(FilterClause filterClause, Type filterType, IServiceProvider requestContainer)
       at System.Web.OData.Query.FilterQueryOption.ApplyTo(IQueryable query, ODataQuerySettings querySettings)
       at System.Web.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, ODataQuerySettings querySettings)
       at System.Web.OData.EnableQueryAttribute.ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)
       at System.Web.OData.EnableQueryAttribute.ExecuteQuery(Object response, HttpRequestMessage request, HttpActionDescriptor actionDescriptor, ODataQueryContext queryContext)
       at System.Web.OData.EnableQueryAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)

使用我们的输出数据的IEnumerable调用ODataController.Ok()方法时会触发错误。

我们正在使用Micrtosoft.Odata.Edm 7.0.0

好的,通过在过滤器中使用DateTimeOffset日期格式来解决它! 只需使用如下:

"http://some.url.ext/test/endPoint?$filter=SomeDate ge 1990-01-01T00:00:00Z"

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM