База данных один ко многим в json - PullRequest
0 голосов
/ 22 октября 2018

Я застрял, когда извлекаю данные из базы данных, которая имеет отношение один ко многим, и я получаю две строки, подобные этой

ID   NAME   CHOICE_ID CHOICE_NAME CHOICE_VALUE
1     1         1          1          true
1     1         1          2          false

Как я могу создать json, подобный этому?

[{
    id:1
    name:1
    choice:[
          {
           choiceId:1
           choiceName:1
           choice_value:true
          },
          {
           choiceId:1
           choiceName:2
           choiceValue:false
           }
      ]
]}

Мой код такой:

 var tbl = from a in db.users
           join b in db.choice
           on a.choice_id = b.choice_id

           select new {
             a.id
             a.name
             a.choice_id
             b.choice_name
             b.choice_value
           }

        table.Select(p => new User()
        {
           id = p.id
           name = p.name
           choice = new List<Choice>()
           {
             new Choice()
             {
               choiceId = p.choiceId
               choiceName = p.choiceName
               choiceValue = p.choiceValue
             }
           }
        }).toList();

Он получит два с одинаковыми идентификатором и именем. Я хочу получить тот, который будет содержать все варианты.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Первый запрос.Вам нужно будет работать в «Группе по», которая группирует сущности на id и name и имеет дочерние сущности под ней.

    var result = tbl
        .GroupBy(p => new { p.id, p.name })
        .Select(g => new
        {
           id = g.Key.id,
           name = g.Key.name,
           choice = g.Select(p => 
             new Choice()
             {
               choiceId = p.choiceId
               choiceName = p.choiceName
               choiceValue = p.choiceValue
             })
        }).toList();

Во-вторых, получение этого в JSON зависитв библиотеках, которые вы используете.С C # это скорее всего .Net Web API или MVC.В любом случае вы можете подключить его к сериализации его ответов в JSON, что является совершенно другим вопросом.Если вы хотите сериализовать его непосредственно в переменную, я бы порекомендовал Newtonsoft.Json, который на данный момент будет довольно простым вызовом:

string json = JsonConvert.SerializeObject(result);
0 голосов
/ 22 октября 2018

Таким образом, чистое решение T-SQL будет выглядеть примерно так:

SELECT Id, 
       Name,
       (
           SELECT choice_id, choice_Name, choice_Value
           FROM choice c
           WHERE c.choice_id = u.choice_id
           FOR JSON AUTO
        ) As choice
FROM users u
FOR JSON AUTO
...