ここでのlastOrDefault
演算子は、データテーブルが空でない場合、最終日を返します。それ以外の場合は、 DateTimeのデフォルト値を返します。これはたまたまDateTime.MinValue
です。
このデフォルト値は変更できないため、クエリ結果がデフォルト値であるかどうかを確認し、クエリの外部に戻ることをお勧めします。
let lastDate =
let d =
query {
for day in days do
lastOrDefault
}
if d = DateTime.MinValue
then new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
else d
ただし、Unixエポックを返すことは、例外的なケースを処理するF#風の方法ではありません。None
データテーブルにレコードがない場合に返す方が明確です。またoption
、予期しない状況に対処するためにこの値を処理する方が簡単です。
let lastDate =
let d =
query {
for day in days do
lastOrDefault
}
if d = DateTime.MinValue then None else Some d
match lastDate with
| None -> (* Process the exceptional case *)
| Some d -> (* Do something with d *)