2011-02-03 2 views
18

У меня есть DataTable с именем dt2 с данными. Я вызываю его метод Select для получения определенных строк.Как передать результат DataTable.Select() в новый DataTable?

DataRow[] foundRows; 

expression = "parent_id=1"; 

foundRows = dt2.Select(expression); 

Как я могу передать Select -метод результата в новый DataTable - говорит FilteredData?

ответ

50

Вы можете использовать CopyToDataTable, доступные на IEnumerable<DataRow> типах.

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() необходимо по крайней мере один DataRow.

var filteredDataRows = dt2.Select(expression); 

var filteredDataTable = new DataTable(); 

if(filteredDataRows.Length != 0) 
    filteredDataTable = filteredDataRows.CopyToDataTable(); 
Смежные вопросы