在 EF Core 中查询日期列
Query a date column in EF Core
我需要查询现有数据库 table,其中有一列 sql 类型 datetime
EF Core 将 DateTime 属性映射到 [datetime2](7)
。这在 EF Core 3.1 中无关紧要。
像 db.Blogs.Where( b => b.StartDate > new DateTime(2020,1,1))
这样的查询仍然被翻译成像 WHERE StartDate > '2020-01-01T00:00:00.00'
这样的东西
我将 EF 更新到 Core 6.0,这样的查询现在会导致类似 WHERE [StartDate] > '2020-01-01T00:00:00.0000000'
的内容,它适用于 [datetime2](7)
类型的列,但不适用于 datetime
[=18 类型的列=]
由于 EF(非核心)和 EF Core 使用了 table,因此该列应保留为 datetime
,但我需要能够对其进行过滤。有办法吗?
如果您在查询中不需要时间信息,您可以将其删除。您可以对核心版本使用 DbFunctions.TruncateTime method for .net version and EntityFunctions.TruncateTime 方法。只需从包含时间信息的列中截断时间信息。
db.Blogs.Where( b => b.StartDate > DbFunctions.TruncateTime(yourdateTime))
应该可以。
既然问题是关于 EF Core 的,那么应该是
db.Blogs.Where( b => b.StartDate.Date > EntityFunctions.TruncateTime(yourdateTime))
我需要查询现有数据库 table,其中有一列 sql 类型 datetime
EF Core 将 DateTime 属性映射到 [datetime2](7)
。这在 EF Core 3.1 中无关紧要。
像 db.Blogs.Where( b => b.StartDate > new DateTime(2020,1,1))
这样的查询仍然被翻译成像 WHERE StartDate > '2020-01-01T00:00:00.00'
我将 EF 更新到 Core 6.0,这样的查询现在会导致类似 WHERE [StartDate] > '2020-01-01T00:00:00.0000000'
的内容,它适用于 [datetime2](7)
类型的列,但不适用于 datetime
[=18 类型的列=]
由于 EF(非核心)和 EF Core 使用了 table,因此该列应保留为 datetime
,但我需要能够对其进行过滤。有办法吗?
如果您在查询中不需要时间信息,您可以将其删除。您可以对核心版本使用 DbFunctions.TruncateTime method for .net version and EntityFunctions.TruncateTime 方法。只需从包含时间信息的列中截断时间信息。
db.Blogs.Where( b => b.StartDate > DbFunctions.TruncateTime(yourdateTime))
应该可以。
既然问题是关于 EF Core 的,那么应该是
db.Blogs.Where( b => b.StartDate.Date > EntityFunctions.TruncateTime(yourdateTime))