none
LINQ的查詢如何格式化日期? RRS feed

  • 問題

  • 我是用VS2008SP1中的LINQ to Entity Framework,資料庫是SQLServer2008

    TABLE dbo.users大致如下

    PKID int, UserName nvarchar(20), LastLoginTime datetime2(7)

    某個功能為讀出一整個表,如下

    var tb1=From u in DBEntity.Users Select new {UserName=u.UserName,LastLoginDay =u.LastLoginTime };

    GridView1.DataSource=tb1; GridView1.DataBind();

    但是現在我想要把查詢結果的日期格式化

    所以LINQ式改成如下

    var tb1=From u in DBEntity.Users Select new {UserName=u.UserName,LastLoginDay=u.LastLoginTime .ToString("yyyy/MM/dd")};

    結果當然是錯誤,因為LINQ不知道如何轉成SQL式去RUN

    那有沒有其他方法可以在查詢的時候格式化日期??

    2010年12月14日 上午 07:45

解答

  • var tb1=(From u in DBEntity.Users Select new {UserName=u.UserName,LastLoginDay=u.LastLoginTime }).ToList();

    var tb2 = from u in tb1 select new {UserName=u.UserName,LastLoginDay=u.LastLoginTime.ToString("yyyy/MM/dd") }).ToList();

    • 已標示為解答 小小郭 2010年12月14日 上午 08:33
    2010年12月14日 上午 08:16

所有回覆

  • var tb1=(From u in DBEntity.Users Select new {UserName=u.UserName,LastLoginDay=u.LastLoginTime }).ToList();

    var tb2 = from u in tb1 select new {UserName=u.UserName,LastLoginDay=u.LastLoginTime.ToString("yyyy/MM/dd") }).ToList();

    • 已標示為解答 小小郭 2010年12月14日 上午 08:33
    2010年12月14日 上午 08:16
  • var tb1=(From u in DBEntity.Users Select new {UserName=u.UserName,LastLoginDay=u.LastLoginTime }).ToList();

    var tb2 = from u in tb1 select new {UserName=u.UserName,LastLoginDay=u.LastLoginTime.ToString("yyyy/MM/dd") }).ToList();


    原來是LINQ是使用兩次的查詢來解決這個問題

    感覺上比較沒有直接下SQL指令去格式化來的直覺

    感謝阿尼,獲益良多

    2010年12月14日 上午 08:33
  • 这个不是两次查询的问题, 这是linq to sql 和linq to entity的问题, linq to sql不支持格式化, linq to entity才支持。第一句的ToList()是将linq to sql 的结果转成了entity,第二句采用的linq to entity语法 
    2012年8月24日 上午 07:57
  • 因為Linq最終還是要翻譯成SQL語法讓資料庫來執行,所以EF必須支援這些語法轉譯才能處理,但由於EF在設計時就與資料庫無關,故資料庫特有的Function EF不會支援.
    不過EF提供一個方式來處理這個問題,某些情況下因為效能考量時可能需要這樣做.

    請參考
    http://www.dotblogs.com.tw/programlin/archive/2010/12/16/20158.aspx
    http://www.dotblogs.com.tw/programlin/archive/2010/12/16/20170.aspx

    2012年8月24日 上午 09:38
  • 很容易嘛 ,虽然linq不能进行格式化操作,但是可以用c#自带的函数,你直接获取日期的值在date函数一下,

    var tb1=From u in DBEntity.Users Select new {UserName=u.UserName,LastLoginDay=u.LastLoginTime.Value.Date};

    2013年6月26日 上午 05:00