2011-06-13 86 views
5

數據我有以下數據爲什麼DataTable.Select排序默認

Name   Value Percent 
0-3 months 0  0 
3-12 months 0  0 
1-5 years  1234.12 28 
5-10 years 13144.11 68 
10-15 years 0  0 
Over 15 years 1233.44 14 
Other Income 2245.12 

的數據集時,我嘗試

foreach (DataRow dr in dsMaturity.Tables[0].Select("name not like 'Other%'")) 
{ 
    TotalValue += double.Parse(dr["Value"].ToString()); 
} 

編輯:其實,類似上面的代碼。我正在使用類似的循環來添加數據以顯示最終寫入圖表的存儲桶。

foreach (DataRow dr in dsMaturity.Tables[0].Rows) 
{ 
    //Add to the display bucket 
} 

我得到的數據進行排序,如:

0-3 months 
10-15 years 
1-5 years 
3-12 months 
5-10 years 
Over 15 years 

爲什麼?我怎樣才能將數據排序?這是很重要的,因爲我在圖表對象中顯示數據。我在這裏錯過了什麼嗎?

+0

如果您強制排序,我不認爲它會被改變。 – IAbstract 2011-06-13 18:55:57

+0

似乎您的數據按第一列排序,如同文本。但是,爲什麼這很重要? – 2011-06-13 18:56:47

+0

我沒有強制任何排序,這是來自默認順序的數據庫。訂購對用戶很重要。 – 2011-06-13 19:13:28

回答

0

嘗試:

foreach (DataRow dr in dsMaturity.Tables[0].Select("name not like 'Other%'", "column_to_sort_by")) 
{ 
    TotalValue += double.Parse(dr["Value"].ToString()); 
} 

其中column_to_sort_by是排序按正確的順序列。

0

你從哪裏得到數據?

如果它來自數據庫,那麼我會檢查並查看手動運行查詢時的順序。

傑夫

+0

數據由過程創建,並將它們添加到返回數據集。我無權修改該程序。我得到的數據,只是想以相同的順序顯示它。 – 2011-06-13 19:15:32

0

如果數據已經排序中這可能是爲什麼它似乎排序的數據庫。您呈現的數據看起來按名稱排序。這是如何在數據庫中?

+0

這不是一個簡單的select語句和order by子句類型的查詢。數據庫通過一些規則創建這些行。我提到的數據集是我從數據庫中得到的。現在我如何使用select而不重新排列原始數據集中的記錄? – 2011-06-13 19:18:51

1

我不知道爲什麼/如何解決這個不改變原始ResultSet,但這裏是我的解決辦法:

foreach (DataRow dr in dsMaturity.Tables[0].Rows) 
{ 
    if (!dr["Name"].ToString().StartsWith("Other ")) 
    { 
     // adding it to display bucket 
    } 
} 
2

dataTable.Select(filterExpression)不保證排序順序。正如文件所述,您應該使用其他重載提供您的排序順序。

在我們的實驗中,結果集由過濾器列排序,但我不相信.NET的後續版本行爲方式相同(因爲它沒有以這種方式記錄)。

0

同意!這很煩人...我有同樣的問題。

如果您安裝了.NET 3.5或更高版本可以使用Linq可過濾行:

var rows = dt.Rows.Cast<DataRow>().Where(r => !((string)r["Name"]).StartsWith("Other") 
1

我也有這個問題,答案是:

dataTable.AsEnumerable(); 

,而不是

dataTable.Select();