J'essaye d'extraire les données de la colonne d'un DataTable à un List<string>. exemple de code ci-dessous:

List<String> userNames = dataTable.Rows.OfType<DataRow>().
                                Select(dr => dr.Field<string>("UserName"))
                                .ToList();

Et je reçois un message d'erreur de Visual Studio 2015:

Impossible d'utiliser une expression lambda comme argument d'une opération distribuée dynamiquement sans d'abord la transtyper en un type d'arborescence délégué ou d'expression.

Le DataTable comporte 3 lignes et toutes les données sont de type string.

J'ai cherché sur Google pendant des heures et je n'arrive toujours pas à le résoudre. Comment puis-je résoudre cette erreur?

Mise à jour: @IvanStoev m'a remarqué que dataTable est une variable dynamic, pas DataTable.

1
ghosrt 21 avril 2017 à 12:21

3 réponses

Meilleure réponse

Votre code semble correct, mais vous pouvez également essayer ci-dessous:

var userNames = (from x in dataTable.AsEnumerable()
                select x.Field<string>("UserName")).ToList();

J'espère que cela t'aides!

1
Sami 21 avril 2017 à 09:27

Vous devez utiliser AsEnumerable () sur DataTable, puis vous opérerez sur DataRows. Vous pouvez essayer ceci:

List<String> userNames = dt.AsEnumerable().Select(dr => dr.Field<string>("UserName")).ToList();
0
daniell89 21 avril 2017 à 09:27

Bien que cela ait été répondu plus tôt, j'ai pensé que cela valait la peine de le mentionner dynamic types évalués au moment de l'exécution, il est évident d'obtenir ces erreurs de compilation lorsque nous essayons d'utiliser . pour accéder à la propriété. par exemple.

dynamic temp = new MyClass();
temp.prop1  // compile time error.

Vous devez renvoyer ceci à un type spécifique, comme suit:

((MyClass)temp).prop1  //   works.

Dans votre cas, essayez de renvoyer dataTable vers DataTable comme

((DataTable)dataTable).Rows.... 
0
Anupam Singh 26 juil. 2017 à 06:14