2011-12-21 11 views
1

DataTableでDataRowをフィルタリングする最も効率的な方法は何ですか?私は整数のリストを持っていて、リスト内の整数に一致するすべての行を取得したい(そして最終的にそれらからDataTableを作成する)。私は現在、以下のコードを使用していますが、かなり遅いです。私はより効率的な方法を欠いていますか?DataTableを効率的にフィルタリングする

foreach (var i in integerlist) 
{ 
    DataRow dr = (from row in originalDataTable.AsEnumerable() 
        where row.Field<int>("urlID") == i 
        select row).FirstOrDefault<DataRow>(); 

    if (dr!= null) 
    { 
      newDataTable.Rows.Add(dr); 
    } 
} 
+0

をご覧ください。http://stackoverflow.com/questions/1268993/selectrows-from-a-dataset-using-linq-where-the-list-of-rowsids-are-in-a-list私はそれがあなたを助けることを願っています... –

答えて

3

私はあなたがその逆を行うことをお勧めします。

foreach (var row in originalDataTable) 
{ 

    if(integerList.Contains((int)row["urlID"])) 
     newDataTable.ImportRow(row) 
} 

データセット内にさらに多くの行があり、intコレクション内に整数があるとさらに意味があります。 希望すると助かります:)

+0

ありがとうございます。コードを試しましたが、 'newDataTable.Add(row)'を 'newDataTable.Rows.Add(row)'に変更する必要がありました。これは 'Add'メソッドがなかったからです。私がそれを実行したとき、私はこの行が既にこのテーブルに属しているというエラーを受け取りました。 – Skoder

+1

申し訳ありません、それは単なるスニペットです。 newDataTable.ImportRow(行)を呼び出す必要があります – Elastep

+0

ありがとう、それは動作します! – Skoder

1

フム...私は何かが欠けていてもよいが、...

は、それが簡単だけDataViewを使用して、それのためにRowFilterを適用することWoudn't?

+0

私は同じことを考えていました...まだ、私は@ Elastepの答えは、元の問題の解決策であると思います。しかし、良い点だ! – Jemes

+0

o6tech:あなたが参照するコードの利点は何ではないか明確ではありません。必要に応じて、フィルタリングされたDataViewから* new * DataTableを作成することができます。私は個人的に、OP *が本当に新しいDataTableを必要としているのか疑問に思います。 – Tigran

+0

ありがとう、私はこれを使うことができるかどうかわかります。私はDataTableが必要ですが、それはSQL Serverデータベースに配置され、DT形式のデータが必要なためです。 – Skoder

0

@Tigranによると、データビューを使用することができるので、それを達成する方法についてthis msdn articleをチェックしてください。

基本的にはDataViewを使用してデータをフィルタリングし、DataView.ToTableメソッドを呼び出して新しいDataTableを取得します。

1

あなたが参加することを試みることができるような:あなたの完全な結果セットを与える必要があります

var resultSet = 
from row in originalDataTable.AsEnumerable() 
join i in integerlist 
on row.Field<int>("urlID") equals i 
select row; 

。 あなたができるデータテーブルが必要な場合:

resultSet.CopyToDataTable();

+0

'select'に'予想されるコンテキストキーワードequals'エラーが表示されます。 – Skoder

+0

申し訳ありません==の代わりに==、構文をチェックする必要があります –

関連する問題