2017-06-26 56 views
0

我的DateTimeOffset列在我的表,當我通過LINQ查詢獲取從該表數據,並在我的選擇使用轉換的DateTimeOffset爲DateTime在LINQ查詢

(from c in this.dbContext.SomeTable 
    where c.Id == someId 
    select new SomeModel() 
    { 
     Id = c.Id, 
     Name = c.Name, 
     StartDate = c.StartDate.DateTime // <-- problematic line 
    } 

,我得到以下異常:

指定的類型成員的日期時間'在LINQ是不支持的實體

是否有可能的DateTimeOffset轉換爲DateTime,而在查詢中獲取數據? 我沒有在DbFunctions中看到任何函數。 我一定要取得與的DateTimeOffset數據做:

data.StartDate = data.StartDate.DateTime 

必須有simplier解決

+1

不知道是否有更好的辦法,但理論上你可以選擇成爲一個匿名對象,做了'ToList'(強制獲取結果的),然後做選擇你在那裏,你的調用DateTime將在LINQ中的對象,而不是LINQ到實體。 – Chris

回答

0

試試這個代碼:

(from c in this.dbContext.SomeTable 
    where c.Id == someId 
    select new SomeModel() 
    { 
     Id = c.Id, 
     Name = c.Name, 
     StartDate = c.StartDate!=null ? c.StartDate.DateTime:null // <-- Check null 
    } 
+0

這是不可能的,順便說起來更好做StartDate = c.StartDate?.DateTime – kriss

1

由於投影(即Select)是最後一個在鏈中操作時,可以在執行之前將數據傳輸到內存。這樣你就不需要在LINQ支持實體:

res = this.dbContext.SomeTable 
    .Where(c => c.Id == someId) 
    .AsEnumerable() // The following "Select" run in memory 
    .Select(c => new SomeModel { 
     Id = c.Id 
    , Name = c.Name 
    , StartDate = c.StartDate.DateTime // No problem here 
    });