【问题标题】:LINQ Query to select data and convert into specific json formatLINQ Query 选择数据并转换为特定的 json 格式
【发布时间】:2018-07-19 14:38:43
【问题描述】:

请帮助解决问题。

我有来自 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;`

【问题讨论】:

  • 您要输出的 json(您的示例)不是有效的 JSON,我认为该数组应该是一个对象?
  • 我明白您的要求,但 “为什么?” 因素太强了。您真的有一个包含该数据的表 - 一个名为“名称”的字段,其值为“登录”?另外,我认为最简单的解决方案是将数据输出到一个简单的对象列表中,然后将 JSON 输出映射到任何使用它的位置。我猜它会在某个地方被 Javascript 使用,这意味着当你返回它时,它的格式几乎无关紧要,因为 Javascript 并不关心它,它非常很容易将数组映射到对象中,即使是动态字段名。

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


【解决方案1】:

您可以提供更多数据,但我认为您提供的部分足以扣除您想要的。据我了解,您的源表包含(Id、Name、ColumnName 和 Value)等列。您希望将数据作为给定 ID 的 JSON,使用“列名”值作为 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"
    }
  }
]

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 2020-08-05
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多