web-dev-qa-db-fra.com

Interrogation de DataColumnCollection avec LINQ

J'essaie d'effectuer une simple requête LINQ sur la propriété Columns d'un DataTable:

from c in myDataTable.Columns.AsQueryable()
    select c.ColumnName

Cependant, ce que je reçois est le suivant:

Impossible de trouver une implémentation du modèle de requête pour le type de source 'System.Linq.IQueryable'. "Sélectionner" introuvable. Envisagez de spécifier explicitement le type de la variable de plage "c".

Comment puis-je faire en sorte que DataColumnCollection joue Nice avec LINQ?

66
David Brown

Que diriez-vous:

var x = from c in dt.Columns.Cast<DataColumn>()
        select c.ColumnName;
110
Dave Markle

Vous pouvez également utiliser:

var x = from DataColumn c in myDataTable.Columns
        select c.ColumnName

Il fera effectivement la même chose que le code de Dave: "dans une expression de requête, une variable d'itération explicitement typée se traduit par une invocation de Cast (IEnumerable)", selon le Enumerable.Cast<TResult> Method Article MSDN.

12
Cobra

Avec la syntaxe de la méthode Linq:

var x = myDataTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName);
6
MarkusE