2013-02-11 51 views
2

我們需要檢索一個排序的項目列表。排序順序與任意項目的指導列表相關。即它可能是1,2,3,4以及3,7,2,4在SQL語句中排序之前LINQ總是首選嗎?

我們不使用LINQ到SQL或存儲過程。

我建議我們按照SQL Server提供的順序讀取列表,並在C#代碼中使用LINQ對其進行排序。

另一種方法是創建一個像這樣的字符串(以下this tip)。

select * from publishers 
Order by (CASE City 
WHEN 'Paris' THEN 1 
WHEN 'Chicago' THEN 2 
WHEN 'Boston' THEN 3 
WHEN 'New York' THEN 4 
ELSE 100 END) ASC, City DESC 

我必須承認,有一定的整潔這種方法,但我真的喜歡C#中的數據操作的發揮。我不能想出另一種方法,但我不得不承認這是一個行之有效的方法。

這裏有什麼缺點? (除了明顯的注入,當然,這對我們來說不是問題,我們不必擔心安全問題,幸運的是)。

+3

它很大程度上取決於一個問題:你是在分頁數據還是在全部讀取?如果你是*分頁*,除了在服務器上排序外,你別無選擇。如果你正在抓取所有的東西,那麼坦白地說,你在什麼地方排序它並不重要 - 在應用程序層進行排序的確可能更具可擴展性(你通常擁有比數據庫服務器更多的應用程序服務器) – 2013-02-11 08:43:20

+0

@MarcGravell一旦。 – 2013-02-11 08:44:31

回答

4

我個人會選擇以數據庫爲中心的解決方案。如果我需要對數據進行排序或分頁,我幾乎總是嘗試在數據庫服務器端執行此操作(通常使用SQL和/或StoredProcedures)。

好處是顯而易見的:

  1. 服務器是通常是在你的應用系統中最強大的機器,讓我們給辛苦了。也因爲它被調整爲爲我們做艱苦的工作。

  2. 在服務器上準備的一次性數據,有時也意味着它也減小了它的大小(過濾或提取具體頁面),所以傳輸到客戶端的數據量大幅減少,這對用戶更快地受益響應時間。

如果你取一次全部(如你所提到的),至少,第一點保持的東西,你可以考慮一下。

+0

出於興趣,您認爲從客戶端的SQL服務器請求的數據是什麼? – 2013-02-11 08:49:00

+0

我並不是指Microsoft SQL Server,而是一些SQL數據庫(只是在你提出的示例代碼中存有問題) – Tigran 2013-02-11 08:50:35

+1

補貨......我糾正了。我想讓他知道。 :( – 2013-02-11 08:52:35