Skip to content

Entityframework DateTime.Now.Date 之 NotSupportedException

🏷️ Entity Framework

很简单的一个查询,结果报错。代码如下:

csharp
// Day 为 DateTime 类型
db.TableA.Where(m => m.Day == DateTime.Now.Date).ToList()

错误信息:

An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

Additional information: LINQ to Entities 不支持指定的类型成员“Date”。只支持初始值设定项、实体成员和实体导航属性。

但是代码改成下面这样就可以正常执行了:

csharp
DateTime today = DateTime.Now.Date;
db.TableA.Where(m => m.Day == today).ToList();

或者

csharp
db.TableA.Where(m => m.Day == DateTime.Now).ToList()

再或者

csharp
DateTime now = DateTime.Now;
db.TableA.Where(m => m.Day == now.Date).ToList();

根据错误消息可以看出 LINQ to Entities 里只支持初始值设定项、实体成员和实体导航属性。按照理解 DateTime.Now.Date 应该也属于初始值设定项才对。Why?

在 stackoverflow 上找到一篇相关的文章 Using DateTime in LINQ to Entities

还有个 MSDN 上的文章 Ignore time portion of datetime in a LINQ to Entity Framework query