Supprimer des colonnes de DataTable en C #

113

J'ai un DataSet dont j'obtiens un DataTable à partir duquel je suis renvoyé d'un appel de fonction. Il a 15-20 colonnes, mais je ne veux que 10 colonnes de données.

Existe-t-il un moyen de supprimer les colonnes que je ne veux pas, de copier le DataTable dans un autre qui n'a que les colonnes définies que je veux ou est-il simplement préférable d'itérer la collection et d'utiliser simplement les colonnes dont j'ai besoin.

J'ai besoin d'écrire les valeurs dans un fichier de données de longueur fixe.

Brian G
la source
Je n'ai aucun contrôle sur l'ensemble de données que je reçois. La seule chose que je sais, c'est qu'il contient tout.
Brian G le

Réponses:

302

En plus de limiter les colonnes sélectionnées pour réduire la bande passante et la mémoire:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);
Tom Ritter
la source
13
Juste pour clarifier: cela fonctionne également lorsque le a DataTabledéjà des lignes existantes, pas seulement sur un vide DataTable.
Uwe Keim
23

Pour supprimer toutes les colonnes après celle que vous souhaitez, le code ci-dessous devrait fonctionner. Il supprimera à l'index 10 (rappelez-vous que les colonnes sont basées sur 0), jusqu'à ce que le nombre de colonnes soit égal ou inférieur à 10.

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}
Timothy Carter
la source
1
juste mon 2c, je n'aime pas cette solution, travailler avec des index de colonnes conduit à une maintenance cauchemardesque ..
Roberto
1
la question comprend la déclaration suivante: "..colonnes définies que je veux .." de sorte que les colonnes nécessaires ne sont même pas nécessairement dans l'ordre séquentiel, donc on ne peut pas simplement dire "j'ai besoin des 10 premières colonnes". En tant que telle, la solution doit contenir un tableau de noms de colonnes qu'il veut, alors nous pouvons éliminer tous les autres ne tombant pas dans cet ensemble de noms "définis". Différentes façons de mettre en œuvre cela; de la simple boucle foreach à la requête ou à linq en utilisant IN.
Roberto
3

La question a déjà été marquée comme réponse, mais je suppose que la question indique que la personne souhaite supprimer plusieurs colonnes d'un fichier DataTable.

Alors pour ça, voici ce que j'ai fait, quand je suis tombé sur le même problème.

string[] ColumnsToBeDeleted = { "col1", "col2", "col3", "col4" };

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
SU7
la source