簡體   English   中英

將LINQ中時間字段的值映射到OData查詢

[英]Mapping the value of the time field in LINQ to OData query

最近,我一直在使用OData .Net Client。 我正在使用DataServiceContext類作為客戶端。 為了獲取數據,我使用LINQ to OData查詢。 問題是當LINQ映射時間類型(不是日期時間,而是時間)字段f.ex的值時。 DocTime字段:

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' ”,這是錯誤的時間格式。

根據此字段的文檔值,應將其映射到“ '2017-01-01T12:00:00' ”(不帶“ datetime”前綴)。 是否有可能以任何方式修改ODataQuery(通過配置,軟件更新或通過操縱URI)以獲得期望的結果而沒有錯誤?

關於您的問題,是否可以修改ODataQuery我看到兩個選擇:

  1. [客戶端]在正在使用的DataServiceContext_SendingRequest2上注冊DataServiceContext_SendingRequest2 SendingRequest2EventArgs包含將要發送的完整請求。 請參見此處的示例,該示例將身份驗證標頭添加到數據服務上下文中,並且可以適應您的需求。

  2. [服務器端]在ODataQueryOptions到達服務器時對其進行修改(我在此進行了介紹)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM