Je voudrais convertir un DataTable en un IEnumerable<>
de Dictionary<string, object>
. J'ai essayé la requête LINQ suivante,Comment convertir un DataTable en IEnumerable <Dictionary <string, object >>?
from DataRow row in ds.Tables[0].AsEnumerable()
let rowDictionary = new Dictionary<string, object>()
from DataColumn column in row.Table.Columns.Cast<DataColumn>()
select rowDictionary.Add(column.ColumnName, row[column]).ToArray();
mais je reçois l'erreur suivante:
error CS1943: An expression of type
'System.Collections.Generic.IEnumerable<System.Data.DataColumn>' is not
allowed in a subsequent from clause in a query expression with source type
'System.Data.EnumerableRowCollection<AnonymousType#1>'. Type inference
failed in the call to 'SelectMany'.
Je sais que je peux brutale-forcer cela avec une boucle, mais il semble que quelque chose que je devrais pouvoir faire dans LINQ. Merci d'avance pour votre aide!
Cela a fonctionné, mais pourquoi ne pas le travail de syntaxe de requête? – GuyBehindtheGuy
Je n'ai pas eu la même erreur que vous, mais select doit avoir un objet à sélectionner et non une action (à moins que l'action ne renvoie l'objet). Dictionary.Add renvoie * void *, par conséquent, il ne peut pas être un argument select. – Elisha
Pourquoi utiliser 'columns.Select' pour un nouvel objet, puis un' .ToDictionary' sur cet objet, plutôt qu'un appel '.ToDictionary' directement? – palswim