我正在用F#学习LINQ。我想知道如何使用lastOrDefault。 如果我有一个名为Days的SQL Server数据表,它存储了一些日期,我想写一个查询来选择表的最后一个日期,如果没有记录,我想返回unixEpoch,即时间00: 1970年1月1日00:00 UTC。
let lastDate =
query {
for day in days do
lastOrDefault
}
如果数据表中没有记录,请告诉我如何返回unixEpoch。
谢谢, 约翰
答案 0 :(得分:4)
如果数据表不为空,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 *)