Заполнить DataTable вложенным словарным результатом - PullRequest
0 голосов
/ 02 октября 2018

Записываю на C # только 2 месяца: у меня есть результат словаря типа: 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 | |---------------------|--------------|-------------| Я хочу либозаполнить 1-й столбец dataTable различными ключами внутреннего словаря и заполнить другие столбцы на его основе или создать требуемый dataTable на основе исходного dataTable.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 02 октября 2018

Мне только что пришлось делать подобные вещи, когда я использовал 2 разные таблицы данных, так как сам я не эксперт. Не могу сказать, что это самый быстрый способ сделать это, но это должно сработать для вас.

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.

Результаты тестирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...