C# 是否有任何LINQ表达式可以将数据表转换为字典

C# 是否有任何LINQ表达式可以将数据表转换为字典,c#,dictionary,datatable,C#,Dictionary,Datatable,在许多情况下,我执行查询并获取数据表,然后将其转换为: Dictionary<string, string> 字典 或 字典 或 字典 我可以用循环创建自己的函数,但我想看看是否有任何LINQ方法可以将datatable转换为字典,并只传递2个lambda作为键和值(类似于将IEnumerable转换为dictionary时所做的操作)。LINQ附带了一个扩展方法,听起来就像您描述的那样 编辑 至于将ToDictionary与DataTable一起使用,我不明白为什么不使用

在许多情况下,我执行查询并获取数据表,然后将其转换为:

 Dictionary<string, string>
字典

字典

字典
我可以用循环创建自己的函数,但我想看看是否有任何LINQ方法可以将datatable转换为字典,并只传递2个lambda作为键和值(类似于将IEnumerable转换为dictionary时所做的操作)。LINQ附带了一个扩展方法,听起来就像您描述的那样

编辑

至于将ToDictionary与DataTable一起使用,我不明白为什么不使用

DataTable dt = GetMyDataTable();
return dt.Rows.Cast<DataRow>().ToDictionary(r => r["KeyColumn"], r => r["ValueColumn"]);
DataTable dt=GetMyDataTable();
返回dt.Rows.Cast();
您需要在其中强制转换,因为DataTable.Rows只是
IEnumerable
,而不是
IEnumerable

,您可以使用&:

例如,如果您想要一个字典,其中键来自col1,值来自col2:

table.AsEnumerable()
     .ToDictionary<int, string>(row => row.Field<int>(col1),
                                row => row.Field<string>(col2));
table.AsEnumerable()
.ToDictionary(行=>行字段(col1),
row=>row.Field(col2));

我知道这一点(如问题中所述)。我想看看数据表中是否有一个等式??你也可以使用
dt.AsEnumerable()
来获得
IEnumerable
@Anthony是的,这就是为什么我对@manji的答案投了更高的票。:)我已经很久没有使用数据集了!最好使用扩展方法,而不是索引然后强制转换。@manji-这不是为我编译的。它无法解析字段属性。我正在使用.net 3.5,如果该帮助添加了对
System.Data.DataSetExtensions.dll的引用
?@manji-我以前没有,但是添加它似乎没有改变任何事情,即使
使用System.Data
指令?它包含在3.5中,应该可以工作。
DataTable dt = GetMyDataTable();
return dt.Rows.Cast<DataRow>().ToDictionary(r => r["KeyColumn"], r => r["ValueColumn"]);
table.AsEnumerable()
     .ToDictionary<int, string>(row => row.Field<int>(col1),
                                row => row.Field<string>(col2));