web-dev-qa-db-fra.com

Comment passer le résultat DataTable.Select () à un nouveau DataTable?

J'ai un DataTable nommé dt2 avec des données. J'appelle sa méthode Select pour obtenir des lignes spécifiques.

DataRow[] foundRows;

expression = "parent_id=1";

foundRows = dt2.Select(expression);

Comment passer le résultat de la méthode Select- à un nouveau DataTable - disons FilteredData?

26
shajan

Vous pouvez utiliser CopyToDataTable , disponible sur IEnumerable<DataRow> les types.

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

Pourquoi ne pas utiliser un DataView à la place?

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

DataView se comportera de la même manière qu'un DataTable aurait l'avantage supplémentaire que toute modification du sous-jacent DataTable (dt2 dans ce cas) serait automatiquement reflété dans le DataView.

14
ardila

Par souci de clarté, la méthode Select renvoie un tableau de type DataRow. C'est pourquoi nous devons utiliser CopyToDataTable(). La réponse d'Alex est bonne. Cependant, si Select n'a renvoyé aucune ligne, CopyToDataTable() lancera un InvalidOperationException.

Testez donc qu'il y a au moins un DataRow avant d'utiliser la CopyToDataTable().

var filteredDataRows = dt2.Select(expression);

var filteredDataTable = new DataTable();

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