我正在使用.NET Core和Entity Framework构建API。
我有一个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数据上下文来检索数据,该如何返回子集?
答案 0 :(得分:0)
引入要返回的类型,并将控制器更改为以下内容:
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();
}
答案 1 :(得分:0)
另一种方法是只返回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());
}