I have an SQLite database of TimeRecords. When a new record is created, no EndTime is provided.
I want to retrieve the first record where the EndTime was not supplied and assign it to a new TimeRecord
EndTime is stored as a DateTime variable.
My Current Query
public static Models.TimeRecord GetMerchandiserCurrentTimeRecord(Models.Merchandiser merchandiser)
{
lock (collisionLock)
{
return database.Table<Models.TimeRecord>().FirstOrDefault(timeRecord => timeRecord.MerchandiserId == merchandiser.Id && timeRecord.EndTime == null);
}
}
Calling the Query
Models.TimeRecord CurrentTimeRecord { get; set; }
// I assign the CurrenTimeRecord in the Constructor
CurrentTimeRecord = Database.TimeRecordDatabase.GetMerchandiserCurrentTimeRecord(SelectedMerchandiser);
I have done some research and discovered that a DateTime does not store Null values, but instead defaults to the 1st January 0001 00:00:00.000.
Therefore, I can understand why my above query was not returning any result, so I changed the query to the below, but still I am not retrieving any result.
return database.Table<Models.TimeRecord>().FirstOrDefault(timeRecord => timeRecord.MerchandiserId == merchandiser.Id && timeRecord.EndTime == '01/01/0001');
Advertisement
Answer
I managed to solve this. Instead of checking against null or a string value I checked against a new instance of DateTime
Refer to below code
DateTime NoSuppliedDate = new DateTime(); return database.Table<Models.TimeRecord>().FirstOrDefault(timeRecord => timeRecord.MerchandiserId == merchandiser.Id && timeRecord.EndTime == NoSuppliedDate);
Edit: A better way was to use DateTime.MinValue as commented by @sqmoore.