簡體   English   中英

LINQ中的DateTime比較未返回正確的結果

[英]DateTime comparison in LINQ not returning correct results

我有以下LINQ來查詢數據庫並從特定日期檢索已刪除的產品。

 return _myDbEntities.Log
            .Where(p => p.Action.Equals("Deleted") &&
            (p.ActionDate > fromDate))
            .Select(p => new DeletedProduct()
            {
                ProductId = p.ProductId,
                ActionDate = p.ActionDate
            }).ToList();

但是,當fromDate來自日期= {12/8/2016 11:41:00 AM}時,查詢正在檢索諸如product.ActionDate.Value = {12/8/2016 11:41:00 AM}之類的值。

查詢清楚地說大於。 這里發生了什么?

每個屬性都有幾分之一秒。 最有可能的是,您的記錄不是精確創建的,而任何用戶創建的時間都是這樣設置的。

另一種可能性是SQL Server中datetimedatetime2之間差異

DateTime類型以比秒更高的精度存儲時間。 它們可以在毫秒或甚至滴答(100納秒)水平上不同。

如果您想在更高級別進行比較,請嘗試以下方法:

(p.ActionDate.Ticks / 10000000) > (fromDate.Ticks / 10000000)

其中10000000是秒中的刻度數。 由於/是一個截斷分數的整數除法,因此將刻度變為完整秒數。

更新:

看起來你正在使用實體框架。 上面的比較可能不適用於那里。 解決方案是針對數據庫運行原始查詢,執行ToList ,然后使用上面的邏輯在LINQ2Objects查詢中再次過濾結果。

暫無
暫無

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

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