如何从.Net Core SQL查询以JSON形式返回模型的子集?

时间:2019-02-19 13:05:20

标签: entity-framework asp.net-core .net-core

我正在使用.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数据上下文来检索数据,该如何返回子集?

2 个答案:

答案 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());
}