加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

F#LINQ lastOrDefault unix Epoch

发布时间:2020-12-15 21:04:23 所属栏目:安全 来源:网络整理
导读:我正在用F#学习LINQ.我想知道如何使用lastOrDefault. 如果我有一个名为Days的SQL Server数据表,它存储了一些日期,我想写一个查询来选择表的最后一个日期,如果没有记录,我想返回unixEpoch,即时间00: 1970年1月1日00:00 UTC. let lastDate = query { for day
我正在用F#学习LINQ.我想知道如何使用lastOrDefault.
如果我有一个名为Days的SQL Server数据表,它存储了一些日期,我想写一个查询来选择表的最后一个日期,如果没有记录,我想返回unixEpoch,即时间00: 1970年1月1日00:00 UTC.

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,DateTimeKind.Utc)
    else d

但是,返回Unix Epoch并不是F#处理特殊情况的方式.如果数据表中没有记录,则返回None更清楚,并且处理此选项值以处理意外情况也更容易:

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 *)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读