2014-01-16 71 views
1

請容忍我...我是一個專業的數據庫,這就是我通常做數據庫的時候,你需要一些快速的自定義排序...的DataTable SortBy(自定義?)

select * 
from <table> 
where columnname = 'something' 
order by case column2 when 'c' then 1 when 'z' then 2 end 

我試圖使用DataTable在C#中複製它。簡短概述創建對比here功能的..有沒有更簡單/快速/骯髒的方式做到這一點...

這是我最初試圖做...

foreach(DataRow row in dt.Select("column1 = false","Column2 ASC, case Column3 when 'something' then 1 when 'somethingelse' then 2 else 3 end")) 
+0

檢查這出: [在數據表中排序行](http://stackoverflow.com/questions/9107916/sorting-rows-in-a-data-table) –

回答

3

您可以使用Linq-To-DataSet達到相同的:

var ordered = from row in dt.AsEnumerable() 
       let col2 = row.Field<string>("column2") 
       orderby col2 == "something" ? 1 : col2 == "somethingElse" ? 2 : 3 
       select row; 

你還記得它是如何工作了這種方式:比較返回 bool其中 true1false0。如果您希望最終達到目的,您必須改變狀況或(更好地)使用 ascending(與第一個版本)

現在你可以用一個foreach循環播放:

foreach(DataRow row in ordered) 
{ 
    // .. 
} 

或創建一個收集與ToList/ToArray或比較合適DataTable

DataTable orderedTable = ordered.CopyToDataTale(); 
+0

我喜歡Linq到DataSet的方法,但我認爲應根據「column2」字段的值進行條件排序 –

+0

Linq to DataSet是否需要數據庫運行?這裏沒有涉及數據庫......我解析一個文件並填充我的DataTable。如果這是一個愚蠢的問題,我很抱歉。 –

+2

@SergeyBerezovskiy:你說得對,我忽略了多重條件。編輯我的答案。 @sam:不,DataTable只是一個內存中的集合。你不需要數據庫。實際上'Ling-To-DataSet'是'Linq-To-Objects'的一個子集。 –