ef linq 查询某时间段内数据 踩的坑

时间:2022-09-04 11:24:11
var now = DateTime.Now;
var
list =db.Jinbi_TypeLimit.Where(x => x.IsAvailable && x.JinbiType == jinbitype && x.StartDateTime <= now && now <= x.EndDateTime);//.ToList(); var list1 =db.Jinbi_TypeLimit.Where(x => x.IsAvailable && x.JinbiType == jinbitype && x.StartDateTime <= DateTime.Now && DateTime.Now <= x.EndDateTime);//.ToList();

执行的结果:

list:  两条数据

list1:0条数据

原因分析:

list:

最终数据库执行的语句,时间比较部分转化为 

x.StartDateTime <= '2015-12-07' &&'2015-12-07'<= x.EndDateTime

list1:

最终数据库执行的语句,时间比较部分转化为 

x.StartDateTime <= (SYSDATETIME()) &&(SYSDATETIME())<= x.EndDateTime

语句本身来看这个本身也没什么不对,但是 如果程序和数据库不在一台服务器(现在大部分情况都是这样的吧),如果web服务器和数据库服务器的时间不一样的话,情况来了。(估计你现在已经想到了)

对于list,时间是变量传入的,那就是web服务器的系统时间
对于list1,SYSDATETIME()是数据库服务器的系统时间
如果两台服务器设置的系统时间不一样,你懂的。结果肯定不一样

今天调试代码发现的问题,留作纪念。
不知道哪个二逼把服务器时间改了