【问题标题】:How can I filter records in an SQLite database against a DateTime value that was not supplied?如何根据未提供的 DateTime 值过滤 SQLite 数据库中的记录?
【发布时间】:2021-07-17 03:58:43
【问题描述】:

我有一个TimeRecords 的 SQLite 数据库。创建新记录时,不会提供EndTime。 我想检索未提供EndTime 的第一条记录并将其分配给新的TimeRecord

EndTime 存储为 DateTime 变量。

我当前的查询

public static Models.TimeRecord GetMerchandiserCurrentTimeRecord(Models.Merchandiser merchandiser)
{
    lock (collisionLock)
    {
        return database.Table<Models.TimeRecord>().FirstOrDefault(timeRecord => timeRecord.MerchandiserId == merchandiser.Id && timeRecord.EndTime == null);
    }
}

调用查询

Models.TimeRecord CurrentTimeRecord { get; set; }

// I assign the CurrenTimeRecord in the Constructor
CurrentTimeRecord = Database.TimeRecordDatabase.GetMerchandiserCurrentTimeRecord(SelectedMerchandiser);

我做了一些research 并发现DateTime 不存储Null 值,而是默认为0001 年1 月1 日00:00:00.000。

因此,我可以理解为什么上面的查询没有返回任何结果,所以我将查询更改为下面的,但仍然没有检索到任何结果。

return database.Table<Models.TimeRecord>().FirstOrDefault(timeRecord => timeRecord.MerchandiserId == merchandiser.Id && timeRecord.EndTime == '01/01/0001');

【问题讨论】:

  • 你忘了给我们上课TimeRecord。如果您已将属性Endtime 定义为可为空的DateTime?,并将相应的表列定义为可为空,则将空的日期时间保存为空。不是 0001 年 1 月 1 日。

标签: c# sql sqlite linq datetime


【解决方案1】:

我设法解决了这个问题。我没有检查nullstring 值,而是检查DateTime 的新实例

参考下面的代码

DateTime NoSuppliedDate = new DateTime();
return database.Table<Models.TimeRecord>().FirstOrDefault(timeRecord => timeRecord.MerchandiserId == merchandiser.Id && timeRecord.EndTime == NoSuppliedDate);

编辑:更好的方法是使用@sqmoore 评论的DateTime.MinValue

【讨论】:

  • 你也可以使用 DateTime.MinValue
猜你喜欢
  • 2020-03-17
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多