Я только начал играть с шаблоном WebAPI в VS2017 ASP.NET Core, используя Entity Framework Core, и я пытаюсь найти лучший способ вернуть подмножество свойств объекта для конкретного запроса Get.
Я использовал встроенный каркас для первоначального генерирования контроллера, а сгенерированный им метод запроса Get
изначально выглядел так:
[HttpGet]
public IEnumerable<Person> GetPeople()
{
return _context.People;
}
Моя проблема заключалась в том, что Person
имеет дочерний класс, который я не хочу включать, когда кто-то звонит на GetPeople()
.
Поскольку я не хочу возвращать анонимный объект, я вместо этого добавил в контроллер сокращенный класс с именем PersonInfo
, который имеет только те свойства, которые я хочу вернуть, например:
public class PersonInfo
{
public int id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string AD { get; set; }
}
и затем я обновил GetPeople()
метод до этого:
[HttpGet]
public IEnumerable<PersonInfo> GetPeople()
{
List<PersonInfo> pi = new List<PersonInfo>();
foreach(var person in _context.People
.Select(p => new { p.id, p.FirstName, p.LastName, p.AD})
.ToList())
{
PersonInfo newPerson = new PersonInfo();
newPerson.id = person.id;
newPerson.FirstName = person.FirstName;
newPerson.LastName = person.LastName;
newPerson.AD = person.AD;
pi.Add(newPerson);
}
return pi;
}
Это прекрасно работает, просто ужасно неэффективно. Должен быть лучший способ, верно?