2012-03-18 85 views
0

可以在DataTable中快速排序數據嗎?快速排序數據表

我有一些dataTable行(30k〜500k)。我必須在dataTable(而不是dataView等)中排序。我有查詢與sory參數,所以我使用

var view = dataTable.DefaultView; 
view.Sort = sortParameters; 

var dataTable = view.ToTable(); 

這部分是確定的,並且速度非常快,但是是一個警告。如果我使用view.ToTable(),新表沒有設置primaryKey。我必須重新設置,並且此操作花費大量時間:/

我無法更改此設置。我必須加入兩個dataTables(具有相同的表定義,但來自其他來源),並返回一個設置primaryKeys - 之前我怎麼說我不能跳過這一點。

有什麼辦法來加速這個?

+0

你會在哪裏使用排序表? – 2012-03-18 20:27:14

回答

2

如果可以,請使用LINQ。這是我找到的最快速的方式。您需要在.net 3.5中引用DataSetExtensions。但是,您最終會得到一個IEnumerable而不是表。

var drs = from x in dataTable.Rows 
      where x.Field<someFieldType>("FieldName") == etc 
      orderby x.Field<someFieldType1>('SortFieldName') 
      select x; 

刪除where子句只進行排序。分別用您自己的值替換someFieldTypesortFieldName

在DRS可以做.ToArray(),或將其導入到DataTable等

+1

+你可以在linq中使用'.AsParallel()'來加快排序! – 2012-03-18 21:03:26

+1

是的,我在工作中的主要項目還沒有達到.NET 4,所以我還沒有能夠使用PLINQ。 – dwerner 2012-03-18 21:18:24