2013-11-22 48 views
0

我想知道Sql服務器上的Order By子句和Datatable排序是否以相同的方式排序記錄。我試了兩次,發現記錄以不同的方式排序。任何人都可以澄清?將在C#中排序數據表和順序通過在SQL中排序給出相同的結果集?

SELECT Top 10000 
'Link' As [Link], 
ODST.ID AS [ID], 
ODST.Type1 AS [Type 1], 
ODST.Type2 AS [Type 2], 

COUNT(DISTINCT ODST.Col1) AS [Col 1], 
COUNT(DISTINCT ODST.ID) AS [Col 2], 
...... 
...... 
COUNT(DISTINCT ODST.Col11) AS [Col 11], 
SUM(ODST.Col12) AS [Col 12], 
..... 
..... 
SUM([Col35]) AS [Col 35] 
FROM ABC ODST 
WHERE id in 
(Select id from 
(select Top 10000 count(*) AS Line, id from ABC WHERE 1=1 
group by id order by Line desc) t2) AND 1=1 
GROUP BY ODST.id, ODST.Type1, ODST.Type2 
ORDER BY ODST.Type1, ODST.Type2 
我已經在上面的查詢 表對此我查詢使用的順序

有它記錄萬元。它會在訂單中產生結果,並且運行速度很慢,因此我們決定將排序部分移到c#中。我們已經從這個查詢中註釋了Order By,並將結果返回給c#。 在數據集中獲取結果並嘗試基於2列進行排序。

分類編碼是

ds.Tables[0].DefaultView.Sort = "[Type 1],[Type 2] ASC"; 
ds1.Tables.Add(ds.Tables[0].DefaultView.ToTable()); 

它排序結果以不同的順序

所以,在所有的,我想知道是否在同一方式或其他雙方訂貨的作品?

+0

請給出你的工作.. –

+0

向我們展示你的代碼,你已經嘗試過,請 – MusicLovingIndianGirl

+2

排序和文化使非常有力的東西... –

回答

0

基本上沒有。

Order By的SQL實現可以不同,因爲它是執行排序另一個庫。

在你的數據表,或任何類型的ORM(如實體框架)的,可以有一定的差異,因爲對象可以轉換爲stringDateTime,(等)。

.NET Framework中執行的排序將基於數據類型,通常通過IComparable接口。這可能與SQL中實現的邏輯不同。儘管這些框架的供應商會盡量保持一致,但可能會出現差異。

您可以看到發生這種情況(如果它尚未「固定」)與實體框架。

如果在某處查詢數據庫的string的地址爲.Contains,則會將其轉換爲sql中的'LIKE',這可能不區分大小寫。

將此操作執行到內存C#List,它很可能是區分大小寫的,因此可能會產生不同的結果。