Joh*_*lip 4 c# asp.net-mvc controller odata
我们正在构建一个odata Web服务,并且面临转换问题。
使用以下odata查询网址:
"http://some.url.ext/test/endPoint?$filter=SomeDate ge 1990-01-01"
Run Code Online (Sandbox Code Playgroud)
在经过odata过滤的枚举中,SomeDate是一个Nullable<DateTime> DateTime?。
不过,看起来好像是odata控制器将其强制转换为 Nullable<DateTimeOffset> DateTimeOffset?
然后抱怨它不能比较a Microsoft.OData.Edm.Date和aSystem.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)
Run Code Online (Sandbox Code Playgroud)
当ODataController.Ok()使用我们的输出数据的IEnumerable 调用方法时,将触发错误。
我们正在使用Micrtosoft.Odata.Edm 7.0.0
好了,通过在过滤器中使用DateTimeOffset日期格式解决了它!只需按以下方式使用它:
"http://some.url.ext/test/endPoint?$filter=SomeDate ge 1990-01-01T00:00:00Z"
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |