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
?
Vous pouvez utiliser CopyToDataTable
, disponible sur IEnumerable<DataRow>
les types.
var filteredData = dt2.Select(expression).CopyToDataTable();
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
.
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();