我的数据库中的数据看起来像这样(简化)
colA, colB, colC
'a', 1, 'abc'
'a', 2, 'def'
'b', 1, 'ghi'
'b', 2, 'jkl'
我的目标是从该表构建一个嵌套字典,如下所示:
dict = {a: {1: 'abc'}, {2: 'def'},
b: {1: 'ghi'}, {2: 'jkl'}}
在我的实际情况中,我有更多的嵌套级别。作为一个数据库查询,我想我可以做一个' for'逐行循环
是否建议以这种方式优雅/高效地填充字典?
答案 0 :(得分:1)
此答案假设您使用DataTable存储SQL结果,但可以调整为使用ORM对象。
我手动填充了我的DataTable,如下所示:
var table= new DataTable("test");
table.Columns.AddRange(new [] {
new DataColumn("colA",typeof(string)),
new DataColumn("colB",typeof(int)),
new DataColumn("colC",typeof(string))}
);
table.Rows.Add("a",1,"abc");
table.Rows.Add("a",2,"def");
table.Rows.Add("b",1,"ghi");
table.Rows.Add("b",2,"jkl");
您可以使用适合您数据库类型的DataTableAdapter填充表格。
拥有DataTable后,您可以像这样创建字典:
var result = table.AsEnumerable()
.GroupBy(r => r["colA"])
.ToDictionary(g => g.Key,
g => g.GroupBy(r => r["colB"])
.ToDictionary (g2 => g2.Key,
g2 => g2.Select(r => r["ColC"])
.First()
)
);