我正在查询具有 DateTime 成员的 SQLite 表:
public class PhotraxBaseData
{
[SQLite.PrimaryKey]
[SQLite.AutoIncrement]
public int Id { get; set; }
. . .
public DateTime dateTimeTaken { get; set; }
. . .
表中的记录包含从 2008 年到 2014 年的 dateTimeTaken 值。没有任何记录包含 null 或空 dateTimeTaken 值。
当通过 LINQPad 查询时,我得到“2008-04-25 10:38:56”这个查询:
SELECT MIN(dateTimeTaken) FROM PhotraxBaseData
....和“2014-04-27 19:26:09”对于“SELECT MAX(...”
IOW,LINQPad 给了我我所期望的。然而,当我运行这段代码时:
dateFrom.Date = PhotraxSQLiteUtils.GetEarliestDate();
dateTo.Date = PhotraxSQLiteUtils.GetLatestDate();
. . .
internal static DateTimeOffset GetEarliestDate()
{
DateTimeOffset dto;
using (var db = new SQLite.SQLiteConnection(App.DBPath))
{
string sql = "SELECT MIN(dateTimeTaken) FROM PhotraxBaseData";
dto = db.ExecuteScalar<DateTimeOffset>(sql);
}
return dto;
}
注意:GetLatestDate() 方法与 GetEarliestDate() 方法相同,不同之处在于使用 MAX insted of MIN
...在这两种情况下,方法实际返回的是“1/1/0001”,数据控件中显示的是“1/1/1914”。数据控件以这种方式声明:
<StackPanel Orientation="Horizontal">
<TextBlock Text="Photos taken between">
</TextBlock>
<DatePicker x:Name="dateFrom">
</DatePicker>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="and">
</TextBlock>
<DatePicker x:Name="dateTo">
</DatePicker>
为什么我没有得到正确的价值观?以及如何获取实际的 MIN 和 MAX 日期(而不是返回“1/1/0001”和显示“1/1/1914”,以填充 DateTimeOffset 变量以及随后的 DatePicker XAML 控件?
注意:我在SQLite 浏览器中看到创建 SQLite 表时似乎可用的唯一数据类型是整数、文本、BLOB、实数和数字
所以也许我的问题是类的 DateTime 成员 (dateTimeTaken) 在 SQLite 表中没有相应的数据类型,因此被存储为......什么?文本?处理此问题的适当方法是将类中的数据类型从 DateTime 更改为 String,然后确保数据存储为“20141103_111111”(yyyymmdd_hhmmss)或类似的,以便准确排序?