Man*_*ngh 6 c# linq linq-to-entities entity-framework
我在实体框架中的where子句中使用date并获得以下错误:
这是由于以下代码:
var entity = dbContext.MyTable
.Where(w => w.PId = 3 && w.CreatedOn.Date == mydate.Date)
.First();
Run Code Online (Sandbox Code Playgroud)
如果我使用数据转换成列表.ToList(),然后比较日期,它将正常工作,但如果我这样做,那么它将首先将数据拉入代码然后过滤掉它.请帮我解决这个问题.目前我使用存储过程来解决问题,但我真的希望这个工作.
Iva*_*oev 13
您可以像这样使用DbFunctions.TruncateTime规范函数
var entity = dbContext.MyTable
.Where(w => w.PId == 3 && DbFunctions.TruncateTime(w.CreatedOn) == mydate.Date)
.First();
Run Code Online (Sandbox Code Playgroud)
当我不得不考虑时间(小时和分钟部分)时,这就是我最终进行日期搜索的方式
var entity = dbContext.MyTable
.Where(
x => x.CreatedOn.Year == mydate.Year
&& x.CreatedOn.Month == mydate.Month
&& x.CreatedOn.Day == mydatee.Day
&& x.CreatedOn.Hour == mydate.Hour
&& x.CreatedOn.Minute== mydate.Minute
).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
小智 5
您不能通过使用直接比较日期.Date,为此您必须使用DbFunctions或EntityFunctions。
我更喜欢使用 DbFunctions
您可以按如下方式使用它:
var entity = dbContext.MyTable
.Where(w => w.PId = 3 && DbFunctions.TruncateTime(w.CreatedOn) == DbFunctions.TruncateTime(mydate))
.First();
Run Code Online (Sandbox Code Playgroud)