2017-09-26 4 views
1

J'ai un DataTable avec le nom de colonne "Numéro de pièce" et diverses autres colonnes. Je veux saisir tous les éléments qui se trouvent dans la colonne "Numéro de pièce". Cette colonne peut parfois être dans une position différente, donc je ne peux pas simplement assigner un index de tableau d'éléments particulier. Je veux utiliser LINQ pour le faire.Récupère tous les éléments de ligne de la table de données de la colonne LINQ C#

En ce moment, je prends tout dans la première colonne. Cependant, je veux définir ceci pour saisir les données selon l'en-tête de colonne.

var parts = from row in dataTable.AsEnumerable() 
      where true != string.IsNullOrWhiteSpace((row.ItemArray[0] == DBNull.Value) 
       ? string.Empty 
       : row.ItemArray[0].ToString()) 
      select row.ItemArray[0]; 
+0

pas sûr de la syntaxe exacte sur le dessus de ma tête, mais quelque chose comme: 'var rows = datatable.rows.AsEnumerable(); var parts = rows.Select (r => string.IsNullOrWhiteSpace (r ["Parties"])? Chaîne.Empty: r ["Parties"]); ' – Muckeypuck

Répondre

1

Vous pouvez indexer un DataColumnCollection par un DataColumn, comme ceci:

// Find the DataColumn by column name 
string columnName = "Part Number"; 
DataColumn partNumber = dataTable.Columns[columnName]; 

var parts = from row in dataTable.AsEnumerable() 
      where !string.IsNullOrWhiteSpace(row[partNumber].ToString()) 
      select row[partNumber]; 

Laissez le souci DataTable de trouver l'index à l'intérieur du ItemArray. Tout ce que vous devez savoir, c'est le nom de la colonne. Pour plus d'informations, voir le documentation.