如何在DataRow上使用.ToDictionary()扩展方法

Bue*_*KoW 14 c# linq

我需要一个Dictionary<string,object>从DataRow生成的.我目前有一些工作,但我做得太多而且没有使用.ToDictionary()扩展方法.

有人可以请教我如何成功完成这项工作吗?

这是我失败的尝试:

var dataDictionary = dataTable.Select(acn + "=" + accountNumber).ToDictionary(key => key.Table.Columns);
Run Code Online (Sandbox Code Playgroud)

这会返回一个KeyValuePair<DataColumnCollection, DataRow>,但同样,我需要一个Dictionary<string,object>

再次感谢您!

jjo*_*son 27

我知道这是旧的,但对于后来出现的那些正确的LINQ表达式是对driis代码的略微修改:

var dictionary = row.Table.Columns
    .Cast<DataColumn>()
    .ToDictionary(col => col.ColumnName, col => row.Field<string>(col.ColumnName));
Run Code Online (Sandbox Code Playgroud)


dri*_*iis 8

您需要指定所需的键,可能是acn表中的列:

.ToDictionary(row => (string)row["acn"]);
Run Code Online (Sandbox Code Playgroud)

如果要对返回的字典中的值运行转换,ToDictionary将使用第二个委托.

编辑

我会留下原来的答案,因为它解释了一般情况.你想要一排; 然后使用它的列作为键,列值作为,值,使用.这就是你如何做到的.

 DataRow row = dataTable.Select(acn + "=" + accountNumber).Single(); // You might want SingleOrDefault
 var dataDictionary = row.Table.Columns.ToDictionary(col => col.Name, col => row[col.Name]);
Run Code Online (Sandbox Code Playgroud)

免责声明,以上是在没有编译器的情况下编写的,可能需要稍微调整一下.