Отдельные данные Json c # - PullRequest
0 голосов
/ 24 апреля 2018

Я создал метод в ядре asp.net, чтобы получить имя родителя и его дочерние имена в одном массиве json, но я не знаю, как это сделать, что мой метод дает мне результат, следующий

{
      "parent": "Kitchen & Dining ",
    "parentID": "QojQhZoUTkG1VhOMJVOBmw==",
    "child": "Bakeware",
    "childID": "BamlddxbUk2lx3uhaT4Hbg=="
},
{
      "parent": "Hobbies",
    "parentID": "yTCm3n8OCUSDQBzDt1f9Hw==",
    "child": "Travel",
    "childID": "CAqwuhPIL02T2ufP/Tl0CA=="
},
{
      "parent": "Kitchen & Dining ",
    "parentID": "QojQhZoUTkG1VhOMJVOBmw==",
    "child": "Table Linen",
    "childID": "EMz9RMY4RESyKtvFVAJTVQ=="
},
{
      "parent": "Kitchen & Dining ",
    "parentID": "QojQhZoUTkG1VhOMJVOBmw==",
    "child": "Tools and Gadgets",
    "childID": "FQtZRfDqtkGrn2II8HobZw=="
},
{
      "parent": "Kitchen & Dining ",
    "parentID": "QojQhZoUTkG1VhOMJVOBmw==",
    "child": "Dinnerware",
    "childID": "FXmgG6wf9UW9AC519gHuTw=="
},
{
      "parent": "Hobbies",
    "parentID": "yTCm3n8OCUSDQBzDt1f9Hw==",
    "child": "Camping & Trecking",
    "childID": "Kgj+Y1xdiUO2i79hxyDE6w=="
};

но я не хочу такие данные, я хочу вот так:

{
      "parent": "Kitchen & Dining ",
    "parentID": "QojQhZoUTkG1VhOMJVOBmw==",
    "ChildData": [
      {
  "child": "Travel",
    "childID": "CAqwuhPIL02T2ufP/Tl0CA=="
  },
   {
  "child": "Table Linen",
    "childID": "EMz9RMY4RESyKtvFVAJTVQ"
  },
   {
  "child": "Tools and Gadgets",
    "childID": "FQtZRfDqtkGrn2II8HobZw=="
  }
  ]
},
{
      "parent": "Hobbies",
    "parentID": "yTCm3n8OCUSDQBzDt1f9Hw==",
    "ChildData":[
{"child": "Travel",
    "childID": "CAqwuhPIL02T2ufP/Tl0CA=="},
{"child": "Camping & Trecking",
    "childID": "Kgj+Y1xdiUO2i79hxyDE6w=="}
 ]
}

как я могу это сделать. Я использую следующий метод, чтобы получить результат из MySQL в c # asp.net core

var data = await (from p in _db.ProductCategoryRelationship
                    join s in _db.Products
                    on p.ProductId equals s.Id
                    where p.CategroyId == id
                    select s).ToListAsync();

есть ли способ настроить этот метод для получения требуемого результата или создать другой метод, который может дать мне мой результат

1 Ответ

0 голосов
/ 24 апреля 2018

Отказ от ответственности: я не работал с asp.net-core, поэтому я просто предполагаю, что в этой среде доступен обычный LINQ.Я также делаю это из памяти.

Предполагая, что у вас есть способ преобразовать ваши данные в JSON, который вы нам не показали, похоже, у вас есть базовая проблема преобразования данных.Вам нужно преобразовать одну структуру данных в другую.

И вот тут LINQ очень пригодится.

// Group by the parent information, so the output is a sequence of 
// collection records with a Key property (what you grouped on).

data2 = data.GroupBy(d => new { parent = d.parent, parentID = d.parentID})

// You can now create an anonymous type that has the parent information
// (as sub-fields in the Key property) and a collection of child
// records.

            .Select(g => new { parent = g.Key.parent,
                               parentID = g.Key.parentID,
                               ChildData = 
                                   g.Select(r => new { r.child,
                                                       r.childID }).ToArray()
                             });

Возможно, вы захотите создать именованный тип, который следует этой структуре (а неанонимный тип, который я использовал), и вместо этого создайте его в своем LINQ (вместо new - до анонимного типа).

class ParentType {
    string parent { get;set;}
    string parentID { get;set; }
    ChildType[] ChildData { get;set; }
}
class ChildType {
    string child { get;set; }
    string childID { get;set }
}

Тогда предложение Select LINQ будет выглядеть так:

.Select(g => new ParentType() {
                   parent = g.Key.parent,
                   parentID = g.Key.parentID,
                   ChildData = g.Select( r => new ChildType() {
                          child = r.child,
                          childID = r.childID }).ToArray()
                })
.ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...