C#循环遍历List <dictionary <string,string >>以填充DataTable

Ton*_*ick 4 c# datatable dictionary loops list

我需要遍历一个词典列表

List<Dictionary<string,string>> 
Run Code Online (Sandbox Code Playgroud)

填充DataTable.列表中的每个字典都有一个Key,它需要是列名,而Value是该列中的值.该列表包含225个词典(表格中有225行).

List<Dictionary<string, string>> myList = 
       JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(jsonRep);
DataTable dt = new DataTable();

    //loop through list, loop through dictionaries, add keys as columns, 
    //values as rows.                     
Run Code Online (Sandbox Code Playgroud)

到目前为止,我一直在努力..

//get max columns
int columns = myList[0].Count; <--gives me 13
//add columns
for (int i = 0; i < columns; i++)
   dt.Columns.Add(string myList[i].Keys);  <--somehow get to the key in dict to add as column names         
//add rows
foreach (var x in myList)
{
     dt.Rows.Add(x); <--not working
}
jsonReprValue = dt; <--save new DataTable to var jsonReprValue
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?谢谢!

Set*_*ers 8

你有两个问题.一个是添加列,另一个是添加行.

添加列

假设您的列表中包含项目,并且列表中的所有词典都具有相同的键,那么您只需要添加其中一个词典中的列:

foreach(string column in myList[0].Keys)
{
    dt.Columns.Add(column);
}
Run Code Online (Sandbox Code Playgroud)

添加行

改变这个:

foreach (var x in myList)
{
    dt.Rows.Add(x); <--not working
}
Run Code Online (Sandbox Code Playgroud)

对此:

foreach(Dictionary<string, string> dictionary in myList)
{
    DataRow dataRow = dt.NewRow();

    foreach(string column in dictionary.Keys)
    {
        dataRow[column] = dictionary[column];
    }

    dt.Rows.Add(dataRow);
}
Run Code Online (Sandbox Code Playgroud)

请参见DataTable.NewRow.