2011-02-03 8 views
18

dt2という名前のDataTableがあります。私はSelectメソッドを呼び出して、特定の行を取得しています。DataTable.Select()の結果を新しいDataTableに渡す方法?

DataRow[] foundRows; 

expression = "parent_id=1"; 

foundRows = dt2.Select(expression); 

どのように私は新しいDataTableSelect -method結果を渡すことができます - FilteredData言いますか?

答えて

50

IEnumerable<DataRow>タイプで利用できるCopyToDataTableを使用できます。

var filteredData = dt2.Select(expression).CopyToDataTable(); 
+2

私は感謝しています。 – DontFretBrett

12

代わりにDataViewを使用してみませんか?

DataView view = new DataView(dt2); 
view.RowFilter = "parent_id = 1"; 

DataViewは非常にDataTableが根底DataTable(この場合dt2)に変更(単数または複数)を自動的DataViewに反映されることを付加的な利点を有するであろうと同じように動作します。

7

Selectメソッドは、DataRowの配列を返します。そのため、CopyToDataTable()を使用する必要があります。アレックスの答えは良いです。ただし、Selectが行を返さなかった場合、CopyToDataTable()InvalidOperationExceptionを投げます。

CopyToDataTable()を使用する前に、少なくとも1つのDataRowがあることをテストします。

var filteredDataRows = dt2.Select(expression); 

var filteredDataTable = new DataTable(); 

if(filteredDataRows.Length != 0) 
    filteredDataTable = filteredDataRows.CopyToDataTable(); 
関連する問題