Lambda表达式中的嵌套Group-By未获得预期结果

时间:2015-09-12 03:46:04

标签: c# json lambda

我有一个MySQL表,其数据如下所示

Column1        Column2      Column3

AAA               ABC           123

AAA               ABC           234

AAA               DEF           1111

AAA               DEF           2222

我正在尝试从中创建JSON数据。预期的JSON结果是:

AAA 
   ABC 
      123
      234
   DEF
      1111
      2222

考虑使用嵌套的group by语句,但无法达到预期的结果。请帮我形成JSON字符串。执行嵌套的规则如下:

父母 - >多个孩子 - >多个大孩子

2 个答案:

答案 0 :(得分:3)

你可以试试这个

使用GroupBy

    var result = list.GroupBy(x => x.Column1).Select(y => new
    {
        C1 = y.Key,
        C1Children = y.GroupBy(z => z.Column2).Select(m => new
        {
            C2 = m.Key,
            C2Children = m.Select(n => n.Column3)
        })
    });

    JavaScriptSerializer serializer = new JavaScriptSerializer();
    var jsonResult = serializer.Serialize(test);

没有GroupBy

    var result = list.Select(x => x.Column1).Distinct().Select(y => new
    {
        Level1 = y,
        Level2List = list.Where(z => z.Column1 == y).Select(y1 => y1.Column2).Distinct().Select(z1 => new
        {
            Level2 = z1,
            Level3List = list.Where(m => m.Column2 == z1).Select(n => n.Column3)
        })
    }).ToList();

    JavaScriptSerializer serializer = new JavaScriptSerializer();
    var jsonResult = serializer.Serialize(result);

答案 1 :(得分:0)

感谢您的宝贵支持。我用下面的lambda表达式解决了我的问题。

var disp = menu.GroupBy(a => a.col1).Select(b => b.First()).Select(c => new BL.Objects.menu()
{id = c.id,
name = c.col1,
items = menu.Where(f => f.col1 == c.col1).GroupBy(g => g.col2).Select(g => g.FirstOrDefault()).Select(j => new BL.Objects.submenu()
{id = j.id,
name = j.col2,
items = menu.Where(k => k.col2 == j.col2 && k.col1 == c.col1).Select(l => new BL.Objects.sub_submenu()
{id = l.id,
name = l.col3
})
})
});

    var jsonResult = System.Web.Script.Serialization.JavaScriptSerializer().Serialize((disp);