我有一本这样的字典:
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返回一个类似于上面的字典。问题是当我想显示整个列表时,索引[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();
答案 0 :(得分:1)
您可以使用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();