2016-12-27 53 views
0

假設你有一個數據庫表,使得實體框架的DateTime比較查詢 - 可能的錯誤?

public partial class myTable 
{ 
    [Key] 
    public Guid rowID { get; set; } 

    [Column(TypeName = "datetime2")] 
    public DateTime? eventTime { get; set; } 
} 

現在假設你正在尋找有一個數據已經5個或更少天前發生的事情:

DateTime dTVal = DateTime.Now.AddDays(-5); 
var event = db.myTable.Where(evt => evt.eventTime >= dTVal); 

上面的查詢將NOT工作。原因在於DateTime.Now當然會給出小時,分鐘和秒鐘。但是,而不是從sql或類似的錯誤提供的結果只返回0行。

爲了解決和檢索預期數據:

var dtVal = DateTime.Now.AddDays(-5).Date; // This wouldn't work in the LINQ to Entities query because AddDays() method... 
var events = db.myTable.Where(evt => evt.eventTime >= dtVal); 

或許是我對EF相對新穎惹的禍,但是這似乎很直觀,有點痛,因爲IntelliSense不把它撿起來作爲以外的任何其他DateTime?和財產懸停提示也DateTime? myTable.eventTime...從而導致我必須去發現每一個日期屬性我反對比較,以確保我一個轉換是正確的。

在這種情況下,不應該採取DateTime對象並在構造查詢之前將其轉換爲正確的格式,並在實際執行查詢之前拋出異常?

有沒有人有這種類型的問題,一個熟悉和你有什麼話在過去所做的與它合作?

Similar Answered Question

+0

如果'DateTime.Now.AddDays(-5)'達2016年12月22日17:48:15Z,你的第一個查詢產生或在此時刻之後,沒有錯,這一切事件。 DateTime值沒有格式。 –

回答

0

解決方法是使用日期2型實體DateTime.Date

var compareDate = DateTime.Now.AddDays(-5).Date; 

謝謝。