Как передать результат DataTable.Select() в новый DataTable?

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

DataRow[] foundRows;

expression = "parent_id=1";

foundRows = dt2.Select(expression);

Как передать результат Select -method в новый DataTable - say FilteredData?

Ответы

Ответ 1

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

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

Ответ 2

Почему бы не использовать DataView вместо этого?

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

DataView будет вести себя очень точно так же, как если бы DataTable с добавленной выгодой, что любые изменения в базовом DataTable (dt2 в этом случае) автоматически отражались бы в DataView.

Ответ 3

Просто для ясности метод Select возвращает массив типа DataRow. Поэтому нам нужно использовать CopyToDataTable(). Алекс отвечает хорошо. Однако, если Select не вернул строки, CopyToDataTable() выкинет InvalidOperationException.

Итак, проверьте, что перед тем, как использовать CopyToDataTable(), по крайней мере один DataRow.

var filteredDataRows = dt2.Select(expression);

var filteredDataTable = new DataTable();

if(filteredDataRows.Length != 0)
    filteredDataTable = filteredDataRows.CopyToDataTable();