我需要一个从DataRow生成的Dictionary<string,object>
。我目前有一些工作,但我做得太多而且没有使用.ToDictionary()扩展方法。
有人可以告诉我如何成功完成这项工作吗?
这是我失败的尝试:
var dataDictionary = dataTable.Select(acn + "=" + accountNumber).ToDictionary(key => key.Table.Columns);
这会返回KeyValuePair<DataColumnCollection, DataRow>
,但我需要Dictionary<string,object>
提前再次感谢!
答案 0 :(得分:27)
我知道这是旧的,但对于那些后来出现的正确的LINQ表达式是对driis代码的略微修改:
var dictionary = row.Table.Columns
.Cast<DataColumn>()
.ToDictionary(col => col.ColumnName, col => row.Field<string>(col.ColumnName));
答案 1 :(得分:8)
您需要指定所需的密钥,可能是表中的acn
列:
.ToDictionary(row => (string)row["acn"]);
如果要对返回的字典中的值运行转换,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]);
免责声明,上面的内容是在没有编译器的情况下编写的,可能需要稍微调整一下。
答案 2 :(得分:2)
@jjoelson的回答产生Dictionary<string, string>
。如果你想要Dictionary<string, object>
,你当然可以这样做:
var dictionary = row.Table.Columns
.Cast<DataColumn>()
.ToDictionary(col => col.ColumnName, col => row.Field<object>(col.ColumnName));
但是一个稍微复杂的版本是:
var dictionary row.Table.Columns
.Cast<DataColumn>()
.ToDictionary(col => col.ColumnName, col => row[col]);
答案 3 :(得分:-1)
我喜欢LINQ
AdminComponent