linq - 如何将 DataTable 转换为 IEnumerable<Dictionary<string, object>>?

标签 linq datatable

我想将 DataTable 转换为 IEnumerable<>Dictionary<string, object> .我尝试了以下 LINQ 查询,

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();

但我收到以下错误:
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'.

我知道我可以用循环来强制执行此操作,但这似乎是我应该能够在 LINQ 中执行的操作。在此先感谢您的帮助!

最佳答案

我假设您想要的是每个行映射列到值的字典:

var dt = new DataTable();

var columns = dt.Columns.Cast<DataColumn>();
dt.AsEnumerable().Select(dataRow => columns.Select(column => 
                     new { Column = column.ColumnName, Value = dataRow[column] })
                 .ToDictionary(data => data.Column, data => data.Value));

关于linq - 如何将 DataTable 转换为 IEnumerable<Dictionary<string, object>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1633627/

相关文章:

LINQ - 使用查询表达式计算数据时差

jsf - 从 p :datatable via a checkbox and sending it to bean 选择多个值

javascript - 数据表排序不起作用

r - Shiny +DT : how to make datatable reactive?

C# 优化 : Inserting 200 million rows into database

c# - `1 在 LINQ 中代表什么?

c# - 有人可以向我解释 LINQ 的相交吗?我不明白为什么这不起作用

c# - 从缓存表中停止 linq

linq - 如何使用 LINQ 执行此使用列重命名(或列别名)的 SELECT 语句?

c# - 将数据表复制为另一个数据表中的列