Как вернуть подмножество модели в виде JSON из SQL-запроса .Net Core? - PullRequest
0 голосов
/ 19 февраля 2019

Я создаю API с помощью .NET Core и Entity Framework.

У меня есть модель Person, которая сопоставляется с таблицей в моей базе данных.Я хочу вернуть только несколько полей из таблицы в JSON, например, так:

// GET: api/userInfo/abd45-4gtew-325fs-3525r
[HttpGet("{userGuid}")]
public IEnumerable<List> GetUserInfo([FromRoute] string userGuid)
{
    return _context.Person.FromSql($"SELECT p.PersonId, p.Name FROM 
    dbo.person p WHERE p.UserGuid= '{userGuid}'").ToList();
}

Это возвращает ошибку:

Cannot implicitly convert type 'System.Collections.Generic.List<Api.Models.Person>' to 
System.Collections.Generic.IEnumerable<System.Collections.Generic.List>'. 

, что имеет смысл.Но если я использую контекст данных Person для извлечения данных, как я могу вернуть подмножество?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Другим методом будет просто вернуть JsonResult и создать динамический объект в вашем выборе.Это не потребует от вас определения типа возврата и предполагает, что он используется клиентом переднего плана или клиентом, который может обрабатывать JSON.

[HttpGet("{userGuid}")]
public JsonResult GetUserInfo([FromRoute] string userGuid)
{
    return Json(_context.Person
                   .Where(p => p.UserGuid == new Guid(userGuid))
                   .Select( p => new { PersonId = p.PersoniD, Name = p.Name } )
                   .ToArray());
}
0 голосов
/ 19 февраля 2019

Введите возвращаемый тип и измените контроллер на что-то вроде:

public class PersonSlim
{
  public Guid PersonId {get;set;}
  public string Name {get;set}
}

[HttpGet("{userGuid}")]
public IEnumerable<PersonSlim> GetUserInfo([FromRoute] string userGuid)
{
    return _context.Person
                   .Where(p => p.UserGuid == new Guid(userGuid))
                   .Select( p => new PersonSlim() { PersonId = p.PersonID, Name = p.Name } )
                   .ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...