web-dev-qa-db-ja.com

DataTable.Select()の結果を新しいDataTableに渡す方法は?

データを含むdt2という名前のDataTableがあります。 Selectメソッドを呼び出して、特定の行を取得しています。

DataRow[] foundRows;

expression = "parent_id=1";

foundRows = dt2.Select(expression);

Select- methodの結果を新しいDataTableFilteredDataと言うにはどうすればよいですか?

26
shajan

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

var filteredData = dt2.Select(expression).CopyToDataTable();
59
Alex Bagnolini

代わりにDataViewを使用しないのはなぜですか?

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

DataViewは、DataTableが基本的なDataTabledt2この場合)は、DataViewに自動的に反映されます。

14
ardila

わかりやすくするために、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();
12
mmcfly