SQLiteSugar 时间筛选问题 返回

C#论坛 老数据
3 3630
该叫什么 001 发布于2017/4/30
悬赏: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 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 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 回复