在使用EntityFramwork
时,当我们需要对数据库中的时间字段进行计算的时候我就需要用到EntityFuncitons
而不能直接写成类似下面的代码了
1 | where(item=>(item.CreateTime-DateTime.Now).Minutes>2) |
仔细翻阅
EntityFunctions.DiffMinutes
的文档发现其留下了这么一句话:1 | // |
其上面明明写着返回结果是timeValue1和timeValue2之间的分钟数.类似的方法还有
DiffMonths\(\)
,DiffSeconds\(\)
,DiffYears\(\)
..
当我们信誓旦旦的写上代码:
1 | Where(item => item.Status == 0 && EntityFunctions.DiffMinutes(DateTime.Now, item.CreateTime)>= 15) |
却怎么也得不到想要的结果..
通过sql监视发现其生成的SQL语句是
1 | DATEDIFF (minute, SysDateTime\(\), SysDateTime\(\))>=15 |
单独执行才发现,这两个参数的顺序反了.简直是我勒个擦了
1 | Where(item =>item.Status == 0 && EntityFunctions.DiffMinutes(item.CreateTime, DateTime.Now)>= 15) |
也就是说:EntityFunctions.Diff系列函数的调用,第一个参数得比第二个参数小,才能返回正数结果.