2010年10月5日 星期二

LINQ 使用Between查詢兩個Datetime範圍之間的資料

使用LINQ或者是Entiry Framework的時候,我們希望可以下兩個起迄日期欄位,然後取得這兩個日期欄位之間的資料,我們也都知道LINQ並沒有between這個我們熟悉的SQL語法可用,然後再加上日期格式,嘿..好像還好,但是也夠我們想好一會兒了。

下面我們舉出實際的例子,透過Entity Framework去查詢出2010/05/07到2010/05/10這兩日期間的資料。當然下面程式中ClickDate這個欄位在表格TrackStatistic中是日期型態欄位,當然我們須進行下面兩個檢查,但這裡主要是說明LINQ中表達方式,檢查資料方式就暫不討論了。
1.先判斷這兩個查詢的日期欄位是符合日期格式(must datetime format)。
2.起日(start date) <= 迄日(end date)。






檢查完資料,在將参數帶入LINQ查詢語法之前,我們須將迄日(end date)加上1天,這樣查詢可精準的抓到小於及等於迄日的資料。如下舉在MVC2中Show()這個Action希望取出兩個日期間的資料:



   1:  public ActionResult Show()
   2:  {
   3:      DateTime sd = Convert.ToDateTime("2010/05/07");
   4:      DateTime ed = Convert.ToDateTime("2010/05/10").AddDays(1);
   5:      TESTDBEntities _db = new TESTDBEntities();
   6:      var showToView = _db.TrackStatistic.Where(
   7:          m => m.ClickDate >= sd && m.ClickDate <= ed);
   8:      return View(showToView);
   9:  }


上面這段LINQ查詢後可精準的抓出兩個日期間的資料,而且entity framework會自動只比對日期欄位的年月日,查詢後資料如下圖所示:

2 則留言:

  1. m => m.ClickDate >= sd && m.ClickDate <= ed);
    不應該要=,只要小於就好
    m.ClickDate < ed

    回覆刪除