2012-03-18 5 views
0

DataTableで高速ソートデータを使用することは可能ですか?高速ソートdataTable

私はいくつかの行(30k〜500k)でdataTableを持っています。私はdataTable(データビューなどではない)でソートする必要があります。私はこの部分はokです、と非常に高速で行いますが、1回の警告である

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

var dataTable = view.ToTable(); 

を使用するので、私はsoryパラメータでクエリを持っています。私はview.ToTable()を使用する場合、新しいテーブルはsetted primaryKeyを持っていません。私はそれを再度設定しなければならず、この操作には多くの時間がかかります。/

これは変更できません。私は2つのdataTableを(同じテーブル定義で他のソースから)結合しなければならないし、設定されたprimaryKeysを返す必要があります - 私はそれをスキップすることはできません前にどのように言う。

これをスピードアップする方法はありますか?

+0

ソートされたテーブルはどこで使用しますか? –

答えて

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()'を使うと、ソートを高速化できます! –

+1

ええ、仕事中の私の主なプロジェクトはまだ.NET 4までではないので、まだPLINQを利用することはできませんでした。 – dwerner