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
....「SELECT MAX(...」の場合は「2014-04-27 19:26:09」
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() メソッドは、MIN の代わりに MAX を使用することを除いて、GetEarliestDate() メソッドと同じです。
...どちらの場合も、メソッドから実際に返されるのは「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>
正しい値が得られないのはなぜですか? また、DateTimeOffset 変数とそれに続く DatePicker XAML コントロールを設定するために、実際の MIN および MAX 日付を取得するにはどうすればよいでしょうか ("1/1/0001" が返され、"1914/1/1" が表示される代わりに)。
注: SQLite ブラウザーで、SQLite テーブルを作成するときに使用できると思われるデータ型は、整数、テキスト、BLOB、実数、および数値のみであることがわかります。
だから多分私の問題は、クラスのDateTimeメンバー(dateTimeTaken)がSQLiteテーブルに対応するデータ型を持っていないため、...何として保存されていることですか?文章?これを処理して、クラスのデータ型を DateTime から String に変更し、データが "20141103_111111" (yyyymmdd_hhmmss) などとして格納されていることを確認して、正確な並べ替えを行う適切な方法はありますか?