Tôi muốn chuyển đổi một DataTable thành một số IEnumerable<>
của Dictionary<string, object>
. Tôi đã thử các truy vấn LINQ sau,Làm cách nào tôi có thể chuyển đổi một DataTable thành một chuỗi <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();
nhưng tôi nhận được lỗi sau:
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'.
Tôi biết tôi có thể brute-lực lượng này với một vòng lặp, nhưng nó có vẻ như một cái gì đó tôi sẽ có thể làm trong LINQ. Cảm ơn trước sự giúp đỡ nào!
Đó làm việc, nhưng tại sao không phải là công việc cú pháp truy vấn? – GuyBehindtheGuy
Tôi đã không nhận được lỗi tương tự như bạn đã làm, nhưng chọn phải có một đối tượng để chọn và không phải là một hành động (trừ khi hành động trả về đối tượng). Dictionary.Add returns * void *, do đó, nó không thể là đối số được chọn. – Elisha
Tại sao lại sử dụng 'columns.Select' cho một đối tượng mới, và sau đó là' .ToDictionary' trên đối tượng đó, chứ không phải là một cuộc gọi '.ToDictionary' trực tiếp? – palswim