【筆記】使用 LINQ to SQL 搜尋時間要注意寫法
- 2010-01-26
- 18623
- 0
LINQ 是一個非常方便的查詢語法,demo目前對於資料庫的操作當然也就幾乎都使用 LINQ 實作,但有一些小地方真的是必須要注意的。
假設需要撈出10分鐘以內的資料如果你用LINQ這樣下
Orders.Where(p=>p.OrderDate.Value.AddMinutes(10) >=DateTime.Now)
資料是抓的到沒錯,但是產生出來的 Where 語句卻是你想不到的....
SELECT * FROM [Orders] AS [t0] WHERE DATEADD(ms, (CONVERT(BigInt,@p0 * 60000)) % 86400000, DATEADD(day, (CONVERT(BigInt,@p0 * 60000)) / 86400000, [t0].[OrderDate])) >= @p1
看看這是多誇張的玩意...雖然說 LINQ 會很聰明的轉換但是這種語法是不能讓人接受的,因此需要換個寫法
Orders.Where(p=>p.OrderDate.Value >=DateTime.Now.AddMinutes(-10))
不要對SQL做轉換,改成對 DateTime 轉換,出來的 語法就可以接受了
SELECT * FROM [Orders] AS [t0] WHERE ([t0].[OrderDate]) >= @p0
更多使用 LINQ 要注意的技巧可以參考保哥的文章
回應討論