demoshop

demo, trying to be the best_

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 要注意的技巧可以參考保哥的文章

回應討論