LINQ to Entities DateTime比较

mie*_*ooy 5 c# linq datetime entity-framework

我在将LINQ中的日期与实体表达式进行比较时遇到问题.我想检查一下DateTime == DateTime - whole day.

我想这样做:

 return context.Events.Any(x => 
                            x.UserId == id 
                            && x.Date >= date 
                            && x.Date < date.AddDays(1) 
                            && x.Type == EventType.StartWork);
Run Code Online (Sandbox Code Playgroud)

问题是由于AddDays()方法,LINQ上面的查询不正确.

我试过使用如下的DbFunction:

return context.Events.Any(x => 
                            x.UserId == id 
                            && x.Date >= date 
                            && x.Date < DbFunctions.AddDays(date, 1) 
                            && x.Type == EventType.StartWork);
Run Code Online (Sandbox Code Playgroud)

还有这个:

  return context.Events.Any(x => 
                                x.UserId == id 
                                && DbFunctions.TruncateTime(date.Date) == date.Date 
                                && x.Type == EventType.StartWork);
Run Code Online (Sandbox Code Playgroud)

这些查询都没有给出预期的结果.

teo*_*kot 5

只需创建2个日期:

var datePlusOneDay = date.AddDays(1);

return context.Events.Any(x => x.UserId == id 
                         && x.Date >= date 
                         && x.Date < datePlusOneDay 
                         && x.Type == EventType.StartWork);
Run Code Online (Sandbox Code Playgroud)

此外,我不确定,但问题可能是你的约会不仅有日期部分,还有时间部分.

因此,为了确保只选择DateTime变量的日期部分,您可以这样做:

date = date.Date;
var datePlusOneDay = date.AddDays(1);
Run Code Online (Sandbox Code Playgroud)