Coding 之路,不由分說 .Net,MVC,jQuery

11三月/120

Linq 多欄位 OrderBy 在不同 Framework 轉譯後 SQL 差異

Google PageRank查詢

前言

自從微軟推出 Linq 之後就很少在直接下 SQL 語法了,雖然 Linq 很方便,但是還是得多嘗試去看轉換後的 SQL 才可以避免結果和預期不一樣或是產出效能不好的 SQL ,今天要介紹的就是多欄位 OrderBy 在 Linq to SQL 和 linq to Entity 上差異的問題。

說明

首先準備好兩個資料來源,這邊我就直接利用 LinqPad 囉!

首先來看我們要測試的語法

上面的語法看似正常,但是我們來看分別轉換後的 SQL

Linq to SQL

Linq to Entity

可以發現兩個問題:

  1. Linq to SQL 在排序的順序上面,和我們所下的順序是剛好相反的,先 endtime 才 starttime
  2. Linq to Entity 只有排序最後下的欄位 endtime 而已

這邊得注意在使用上會有這樣的問題,而改換成下面的 Landa Expression 也是一樣的結果。

如果要多條件的排序建議還是使用下面的語法來查詢囉!

這樣就可以產生如我們想像的 SQL 語法了

結論

這又是一次的魔鬼藏在細節中啊!在使用 Linq 的時候,有時候還是得去看看它所轉譯出的 SQL 語法,避免未來程式上會有效能或是邏輯上的問題,希望這次的分享對大家有幫助啦!

參考資料

101 LINQ Samples

回覆 (0) 引用 (0)

還沒有回覆。


Leave a comment

目前沒有人引用這篇文章。