2012-01-28 35 views
4

我正在用F#學習LINQ。我想知道如何使用lastOrDefault。 如果我有一個名爲Days的SQL Server數據表,它存儲了一些日期,我想寫一個查詢來選擇表的最後日期,如果沒有記錄,我想返回時間爲00的unixEpoch :00:00 UTC 1月1日1970年F#LINQ lastOrDefault unix Epoch

let lastDate = 
    query { 
      for day in days do 
      lastOrDefault 
      } 

讓我懂得回報unixEpoch,如果在數據表中沒有記錄。

感謝, 約翰

回答

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的時代是不是F#-ish方式處理特殊情況。如果數據表中沒有記錄,則返回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 *) 
相關問題