2017-02-01 8 views
0

Недавно я работал с OData .Net Client. Я использую класс DataServiceContext в качестве клиента. Чтобы получить данные, я использую LINQ to OData Query. Проблема заключается в том, что LINQ отображает значение поля типа времени (не datetime, а время) f.ex. DocTime поле:Сопоставление значения поля времени в запросе LINQ to OData

Запрос LINQ:

IQueryable<Document> query = CurrentServiceContainer.Orders.Where(e => e.DocTime >= new DateTime(2017, 1, 1, 12, 0, 0)); 

отображается следующим OData запроса:

"https://$HOST_ADDRESS$/b1s/v1/Orders()?$filter=DocTime ge datetime'2017-01-01T12:00:00'" (query.ToString()) 

, исполнение которых дает следующий результат:

{ 
    "error" : { 
     "code" : -1000, 
     "message" : { 
     "lang" : "en-us", 
     "value" : "Query string error - the given value('datetime') of property 'DocTime' is of invalid time format" 
     } 
    } 
} 

Как вам может видеть, что значение поля времени DocTime отображается на «datetime'2017-01-01T12:00:00'», что является неправильным форматом времени.

В соответствии с документацией значение этого поля shoud должно быть сопоставлено с «'2017-01-01T12:00:00'» (без префикса «datetime»). Можно ли каким-либо образом изменить ODataQuery (путем настройки, обновления программного обеспечения или с помощью URI), чтобы получить желаемый результат без ошибок?

+0

Не могли бы вы попытаться изменить тип с 'DateTime' на' DateTimeOffset'? – GWigWam

ответ

0

Что касается Вашего вопроса, если можно изменить ODataQuery Я вижу два варианта:

  1. [] Регистрируют клиентской DataServiceContext_SendingRequest2 на DataServiceContext вы используете. SendingRequest2EventArgs содержит полный запрос, который будет отправлен. См. here для примера, который добавляет заголовки аутентификации в контекст службы данных и которые вы можете адаптировать к вашим потребностям.

  2. [ServerSide] Измените ODataQueryOptions, когда они прибудут на сервер (который я описал here).