Заполнить dataGridView со списком в словаре? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть словарь, подобный этому:

Dictionary<string, List<string>>

После добавления ключей и значений, подобных этому:

resultDic.Add(s, new List<string>());
    foreach (DataRow row in schemaTable.Rows)
    {
     resultDic[s].Add(row[3].ToString());
    }

Затем я хочу отобразить как строковые значения, так и отдельные значения внутрисписок из словаря.Чтобы добиться этого, я попытался сделать так:

        dataGridView2.DataSource = Controller.GetMetaDataTables2().Select(x 
        => new { ColumnName = x.Key, Table = x.Value[0] }).ToList();
        dataGridView2.Show();

GetMetaDataTables2 возвращает словарь, подобный приведенному выше.Проблема в том, что index [0], очевидно, дает мне только первое значение, когда я хочу показать весь список.Я хочу повторить, но я не знаю, как это сделать здесь.Я только начинаю понимать выражение LINQ.Есть идеи?

Благодарен за любую помощь!

Обновление: исправлено с помощью Маркуса.Я использовал его решение с одним изменением.Вместо y.ToArray () мне нужно было просто напечатать y.Как это:

   dataGridView2.DataSource = Controller.GetMetaDataTables2()
   .SelectMany(x => x.Value.Select(y => new { ColumnName = x.Key, Table = 
   y }))
   .ToArray();
   dataGridView2.Show();

1 Ответ

0 голосов
/ 20 февраля 2019

Вы можете использовать метод SelectMany, чтобы сгладить список, например:

resultDic
  .SelectMany(x => x.Value.Select(y => new { ColumnName = x.Key, Table = y.ToArray() }))
  .ToArray();

Для

A - "A.1", "A.2"
B - "B.1", "B.2"
C - "C.1", "C.2"

это приводит к

A - A.1
A - A.2
B - B.1
B - B.2
C - C.1
C- C.2

Чтобы отобразить его в GridView, код должен быть

dataGridView2.DataSource = Controller.GetMetaDataTables2()
  .SelectMany(x => x.Value.Select(y => new { ColumnName = x.Key, Table = y.ToArray() }))
  .ToArray();
dataGridView2.Show();
...