我正在用F#学习LINQ。我想知道如何使用lastOrDefault。
如果我有一个名为Days的SQL Server数据表,该表存储了一些日期,我想编写一个查询来选择表的最后日期,如果没有记录,我想返回unixEpoch,即时间00: 1970年1月1日世界标准时间00:00。
let lastDate =
query {
for day in days do
lastOrDefault
}
如果数据表中没有记录,请让我知道如何返回unixEpoch。
谢谢,
约翰
最佳答案
如果数据表不为空,则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 Epoch并不是处理异常情况的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 *)