Chciałbym przekonwertować DataTable na IEnumerable<>
z Dictionary<string, object>
. Próbowałem następujące kwerendy LINQ,Jak mogę przekonwertować DataTable na 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();
ale pojawia się następujący błąd:
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'.
wiem może brute-force to z pętlą, ale wydaje się, że coś powinienem móc robić w LINQ. Z góry dziękuję za pomoc!
To działało, ale dlaczego nie zrobił praca składni zapytania? – GuyBehindtheGuy
Nie otrzymałem tego samego błędu, co ty, ale wybierz musi mieć obiekt do wybrania, a nie działanie (chyba, że akcja zwraca obiekt). Dictionary.Add zwraca * void *, dlatego nie może być argumentem select. – Elisha
Po co używać 'columns.Select' do nowego obiektu, a następnie' .ToDictionary' na tym obiekcie, zamiast wywoływać '.ToDictionary' bezpośrednio? – palswim