sqlite中比较时间出错 返回

SqlSugar 待处理
1 131

两个表的时间设置相同

 public DateTime Time { get; set; }

在查询中比较时间相等,总是为false

设置 ColumnDataType="INTEGER" 也不行

使用 SqlFunc.UNIX_TIMESTAMP 比较时间就正确

在DB Browser中查看两表数据,发现其中一个表中的时间末尾有“.000”

这种不一致的原因是什么?有办法规避吗?

热忱回答1

  • sqlite列的初始化类型与实际存储类型不一定相同,即使设置了 ColumnDataType="INTEGER" 实际存储还是TEXT

    设置SqlParameterDbType,将DateTime转换为timestamp可以避免解决上述问题

    但这样又会引起json转换问题:

     var ret1 = await table.AsQueryable().Select(t => t).ToListAsync();
     var ret2 = await table.AsQueryable().Select(t => new { Time = t }).ToListAsync();

    第二个查询报错:Newtonsoft.Json.JsonReaderException:“Unexpected character encountered while parsing value: 1. Path 'Time.Time', line 1, position 30.”
    需对属性再应用 JsonConverter,将timestamp转回DateTime

    另外内置的 Newtonsoft.Json.Converters.UnixDateTimeConverter 好像是按照UTC时间来转换的

    0 回复