用嵌套的字典结果填充DataTable

时间:2018-10-02 11:50:14

标签: c# asp.net linq datatable

仅用C#编码两个月:我有一个字典类型为: Dictionary<string, Dictionary<string, decimal>>

我已经能够将其编写如下:

R&D Trainer 3000 Developer 6000 Consultant 0 Dev Trainer 0 Developer 4000 Consultant 5000

如您所见,内部字典具有相同的“键”。我试图通过以下方式将它们放入dataTable:

          var columns = l.GroupBy(d => d.Department, (key, items) => key).ToList();


        dt.Columns.Add("Function");
        foreach (var column in columns)
            dt.Columns.Add(column);
       foreach (var dict in result2)
        {

            Console.WriteLine(dict.Key );

                foreach (var dict2 in dict.Value)
                {

                    DataRow row2 = dt.NewRow();

                    row2["Function"] = dict2.Key;
                    row2[dict.Key] = dict2.Value;
                    dt.Rows.Add(row2);

                Console.WriteLine("  " + dict2.Key + "\t" + dict2.Value);
                }

        }

dataTable在GridView中的结果: |---------------------|--------------|-------------| | Function | R&D | Dev | |---------------------|--------------|-------------| | Trainer | 3000 | | |---------------------|--------------|-------------| | Developer | 6000 | | |---------------------|--------------|-------------| | Consultant | 0 | | |---------------------|--------------|-------------| | Trainer | | 0 | |---------------------|--------------|-------------| | Developer | | 4000 | |---------------------|--------------|-------------| | Consultant | | 5000 | |---------------------|--------------|-------------|

首选结果:

|---------------------|--------------|-------------| | Function | R&D | Dev | |---------------------|--------------|-------------| | Trainer | 3000 | 0 | |---------------------|--------------|-------------| | Developer | 6000 | 4000 | |---------------------|--------------|-------------| | Consultant | 0 | 5000 | |---------------------|--------------|-------------| 我想用内部字典的不同键填充dataTable的第一列,并基于它填充其他列,或者基于初始dataTable创建所需的dataTable。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我最近在使用2个不同的DataTables时不得不做这种事情,因为我自己也不是专家,我不能说这是最快的方法,但这应该对您有用。

string find = "Function = '" + dict2.Key + "'";
DataRow[] foundRows = result.Select(find);
if (foundRows.Length > 0)
{
    DataRow row1 = foundRows[0];
    row1[dict.Key] = dict2.Value;
}
else
{
    DataRow row2 = dt.NewRow();
    row2["Function"] = dict2.Key;
    row2[dict.Key] = dict2.Value;
    dt.Rows.Add(row2);
}

编辑:您应该将此代码放在最后的foreach中。

Results from testing