从数据库查询c#填充嵌套字典

时间:2015-05-14 10:56:53

标签: c# linq dictionary

我的数据库中的数据看起来像这样(简化)

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'逐行循环

是否建议以这种方式优雅/高效地填充字典?

1 个答案:

答案 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()
                                                     )
                                );