【筆記】Entity Framework 日期時間(DateTime)比較的問題。

  • 5045
  • 0
  • 2016-05-30

  我們經常會使用到日期時間的比較,但自己卻在 LINQ to Entities 的查詢中直接使用 DateTime.CompareTo(DateTime) 的方法遇到了一個問題……。

  在使用 LINQ to Entities 的查詢中使用 DateTime.Date 來進行比較會出現「LINQ to Entities 中不支援所指定的型別成員 'Date'。僅支援初始設定式、實體成員和實體導覽屬性。」的錯誤訊息。範例程式碼如下所示:


collection.Where(x => x.EndDateTime.CompareTo(condition.StartDateTime) >= 0);

  後來參考了幾篇網路上的文章,也獲得各種解決方法,最後發現一個方便的解法,使用 DbFunctions.TruncateTime(Nullable) 方法(Entity Framework 6)即可解決,不是 Entity Framework 6 的版本則可參閱 EntityFunctions.TruncateTime(Nullable) 方法,範例程式碼如下所示:


collection.Where(x => DbFunctions.TruncateTime(x.EndDateTime).Value.CompareTo(condition.StartDateTime) >= 0);

參考資料:

  1. DbFunctions.TruncateTime 方法 (Nullable(DateTime)) (System.Data.Entity) - MSDN
  2. EntityFunctions.TruncateTime 方法 (Nullable(DateTime)) (System.Data.Objects) - MSDN
  3. c# - What are the difference between EntityFunctions.TruncateTime and DbFunctions.TruncateTime methods? - Stack Overflow

創用 CC 授權條款 本著作由Zhi-Wei製作,以創用CC 姓名標示-非商業性-相同方式分享 4.0 國際 授權條款釋出。