SQLiteSugar 时间筛选问题 返回
C#论坛
老数据
3
3630
悬赏:0 飞吻
int count = db.Queryable<k_manager_log>().Where(x => x.add_time < DateTime.Now.AddDays(-7)).Count(); db.Delete<k_manager_log>(x => x.add_time < DateTime.Now.AddDays(-7));
生成的SQL语句是
SELECT COUNT(1) FROM [k_manager_log] WHERE 1=1 AND ([add_time] < @add_time101)
[{"key":"@add_time101","value":"\/Date(1494151911000)\/"}]
DELETE FROM [k_manager_log] WHERE 1=1 AND ([add_time] < @add_time1)
[{"key":"@add_time1","value":"\/Date(1494151911000)\/"}]最后的结果是把这个表的数据全部删除了。。。
请问是语法问题么?
热忱回答(3)
-
程序 VIP0
2017/5/1语法没错, 删除了日期小于2017年5月7日18点11分的数据
0 回复 -
001 VIP0
2017/5/1如果语法没错,那就是 SqlliteSugar 把 DateTime.Now.AddDays(-7) 解析错了,应该是减7天,生成的SQL语句却加了7天,难怪把所有数据都清空了
昨天用别的方法试了下可以成功处理
var date = DateTime.Now.AddDays(-7); db.ExecuteCommand("delete from k_manager_log where add_time < @add_time", new { add_time = date })总结
SQLiteSugar 在解析DateTime.Now.AddDays(-D)的时候把时间加上了d天,希望作者空闲之余核实并修复
0 回复 -
001 VIP0
2017/5/1刚刚又试了一把,先声明下时间再操作就正常了
var date = DateTime.Now.AddDays(-days); int count = db.Queryable<k_manager_log>().Where(x => x.add_time < date).Count(); db.Delete<k_manager_log>(x => x.add_time < date);
再总结
变量尽量在外部声明,拉姆达内尽量不要逻辑转换
0 回复