LINQ查询以选择数据并转换为特定的json格式

时间:2018-07-19 14:38:43

标签: c# json linq model-view-controller

请帮助获取解决方案。

我有类似sql server的数据

Name   ColumnName  Value
------------------------------------------------
Login      FirstName         ABC
Login      LastName         XYX

我的要求是获取json中的数据

{ Name: "Login", Data: [ FirstName: "ABC", LastName: "XYZ" ] }

我已经写过查询,但是我没有得到确切的输出

这是一个查询,看起来我很接近,请帮助我获得像上面的json一样的结果

`var data = myDbEntities.GetSectionData(Id)
            .GroupBy(section=> new { section.Name })
            .OrderBy(section => section.Key.Section)
            .Select(section => new
            {
                Section = section.Key.Section,
                Data = section.Select(c => new KeyValuePair<string, string>
                (
                    c.ColumnName,
                    c.Value
                ))
            }).ToDictionary(c => c.Section);
        return data;`

1 个答案:

答案 0 :(得分:1)

您可以提供更多数据,但我认为您提供的零件足以扣除您想要的东西。据我了解,您的源表具有类似(Id,Name,ColumnName和Value)的列。您希望将给定ID的数据以JSON的形式使用“ columnname”值作为json键名。您的示例json尽管无效,但接近最终输出(代码使用NuGet的Newtonsoft.Json):

 var data = myDbEntities
    .Where(jt => jt.Id==1) 
    // probably your GetSectionData(id) is doing the same thing

    .GroupBy(jt => jt.Name)
    .AsEnumerable()
    .Select(jt => new {
        Name = jt.Key,
        Data = jt.ToDictionary(j => j.ColumnName, j => j.Value)
    });

var json = JsonConvert.SerializeObject(data);
Console.WriteLine(json);

编辑:示例输出:

[
  {
    "Name": "Login",
    "Data": {
      "FirstName": "ABC",
      "LastName": "XYZ"
    }
  },
  {
    "Name": "Login1",
    "Data": {
      "Prop 1": "ABCD",
      "Prop 2": "ABCDE",
      "Prop 3": "Alfa"
    }
  }
]