【发布时间】:2019-02-21 06:41:25
【问题描述】:
我有一本这样的字典:
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 表达式。有什么想法吗?
感谢所有帮助!
更新:在 Markus 的帮助下修复了它。我使用他的解决方案进行了一次更改。而不是 y.ToArray() 我需要简单地打印 y。像这样:
dataGridView2.DataSource = Controller.GetMetaDataTables2()
.SelectMany(x => x.Value.Select(y => new { ColumnName = x.Key, Table =
y }))
.ToArray();
dataGridView2.Show();
【问题讨论】:
-
你想要的结果是什么?包含“Key A, Value A.1”、“Key A, Value A.2”、“Key B, Value B.1”等行的平面表?
-
尝试以下使用字符串连接: Dictionary
> dict = Controller.GetMetaDataTables2.AsEnumerable() .GroupBy(x => x.Field ("ColA") , y => y.Field ("ColB")) .ToDictionary(x => x.Key, y => y.ToList());var results = dict.Select(x => new { ColumnName = x.Key, Table = string.Join(",", x.Value) }); -
@Markus 是的,没错。
-
@jdweng 您的解决方案给了我这个错误: KeyValuePair
>' 不包含'Field' 的定义和最佳扩展方法重载'DataRowExtensions.Field ( DataRow, string)' 需要“DataRow”类型的接收器。我是否需要让 GetMetaDataTables 方法返回 DataRow? -
我假设你有 DataTables。所以代码正在寻找表中的列。如果您有一个类,则将 x.Field 替换为该类中的属性名称或匿名列名称。
标签: c# dictionary datagridview populate