用字典中的列表填充 dataGridView?

Populate dataGridView with a list inside a dictionary?

我有这样的字典:

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 returns 像上面那样的字典。问题是索引 [0] 显然只给我第一个值,当我想显示整个列表时。我想迭代,但我不知道如何在这里进行。我才刚刚开始了解 LINQ 表达式。有什么想法吗?

感谢所有帮助!

更新:在 Markus 的帮助下修复了它。我用他的解决方案进行了一次更改。而不是 y.ToArray() 我需要简单地打印 y。像这样:

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

您可以使用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();