如何将DataTable.Select()结果传递给新的DataTable?

我有一个名为dt2DataTable和数据。 我调用它的Select方法来获取一些特定的行。

 DataRow[] foundRows; expression = "parent_id=1"; foundRows = dt2.Select(expression); 

如何将Select -method结果传递给新的DataTable – 比如FilteredData

您可以使用IEnumerable类型上提供的CopyToDataTable

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

为什么不使用DataView呢?

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

DataView行为方式与DataTable行为方式非常相似,可以在DataView自动反映对底层DataTable (本例中为dt2 )的任何更改。

为清楚起见, Select方法返回DataRow类型的数组。 这就是我们需要使用CopyToDataTable() 。 亚历克斯的答案很好。 但是,如果Select没有返回任何行,则CopyToDataTable()将抛出InvalidOperationException

因此,在使用CopyToDataTable()之前测试至少有一个DataRow

 var filteredDataRows = dt2.Select(expression); var filteredDataTable = new DataTable(); if(filteredDataRows.Length != 0) filteredDataTable = filteredDataRows.CopyToDataTable();