2016-03-04 42 views
3

我想作以下電話:通過EF LINQ以UTC格式比較DateTimeOffset?

itemsCount = await _db.Disposals 
         .Include(d => d.ItemIds) 
         .Where(d => d.OrganizationId == SelectedOrganizationID && 
            d.CreateDateTime.UtcDateTime > greaterThanUtc && 
            d.CreateDateTime.UtcDateTime < lessThanUtc) 
         .SelectMany(d => d.ItemIds) 
         .CountAsync(); 

的SQL CreateDateTime字段是datetimeoffset類型的SQL。這個問題,我99%肯定,是這樣的:CreateDateTime.UtcDateTime在SQL中不存在,所以它必須在後端完成,而不是在db中完成。我可以把所有的數據,以這樣的後端,然後做一個比較:

itemsCount = _db.Disposals 
       .Include(d => d.ItemIds) 
       .AsEnumerable() 

,但是這顯然是一個貧窮的解決方案,並與混亂異步。我可以在這裏選擇什麼異步計數?

回答

0

如果要強制將所有來自數據庫的DateTime對象指定爲UTC,則需要添加T4轉換文件併爲所有DateTime和可爲空的DateTime對象添加其他邏輯,以使它們初始化爲DateTimeKind .Utc

1)爲您的.edmx模型

2)打開.TT文件,找到 「WritePrimitiveTypeProperty」 方法創建.TT文件。

3)替換現有的setter代碼。這是ReportPropertyChanging和ReportPropertyChanged方法回調之間的所有內容。

這裏是一步一步的指示:

http://www.aaroncoleman.net/post/2011/06/16/forcing-entity-framework-to-mark-datetime-fields-at-utc.aspx

+0

我看到了答案,並解釋說在這裏 - 我需要它這種特定情況下,雖然,沒有整體。 – VSO