【问题标题】:Get a certain child property from parent instead of the whole object in Entity Framework从父级而不是实体框架中的整个对象获取某个子属性
【发布时间】:2021-07-13 02:27:45
【问题描述】:

在 http get 方法中,我想获取与 todoItem 关联的用户 id,而不获取完整的用户对象(只是它的 id)。这是我目前所拥有的:

[HttpGet]
public async Task<ActionResult<List<TodoItem>>> GetTodoItems()
{
        var todoItem = await _context.TodoItems.Include(x => x.User).ToListAsync();

        if (!todoItem.Any()) 
           return NotFound();

        return todoItem;
}

当前输出:

{
    "id": "47167fe1-4831-4612-8f50-4ba4c70e7eac",
    "name": "read book",
    "isComplete": false,
    "secrete": "no secrete",
    "user": {
        "id": "3ca7b4b8-dd63-40ce-9d3a-3fc88286da64",
        "email": "Lynne87@test.com",
        "firstName": "Lynne",
        "lastName": "Harber"
    }
}

需要的输出:

{
    "id": "47167fe1-4831-4612-8f50-4ba4c70e7eac",
    "name": "read book",
    "isComplete": false,
    "secrete": "no secrete",
    "user": "3ca7b4b8-dd63-40ce-9d3a-3fc88286da64",
    }
}

【问题讨论】:

  • 在调用ToListAsync 之前,仅将Select 与您想要的成员一起使用。如果您只期望一个结果,请使用FirstOrDefaultAsyncSingleOrDefaultAsync。如果Select 返回所有必要字段,则不需要Include
  • 顺便说一句,所需的输出不再是ToDoItem,这意味着返回类型应该改变并反映实际输出

标签: c# entity-framework linq asp.net-web-api


【解决方案1】:

在调用 ToListAsync 之前,仅将 Select 与您想要的成员一起使用。如果Select 返回所有必要字段,则不需要Include。所需的输出不再是 ToDoItem,这意味着返回类型应该改变并反映实际输出。要么创建一个与输出匹配的新 DTO 类型,要么只返回一个 ActionResult:

[HttpGet]
public async Task<ActionResult> GetTodoItems()
{
    var items = await _context.TodoItems
                              .Select(x=>  new {
                                     x.Id,
                                     x.Name,
                                     x.IsComplete,
                                     x.Secrete,
                                     User = x.User.Id     
                              })
                              .ToListAsync();
            
    if (todoItem..Length==0) 
    {
        return NotFound();
    }

    return Ok(items);
}

【讨论】:

  • 这正是我一直在寻找的,我是实体框架的新手,所以还有很多我不明白的东西。谢谢
猜你喜欢
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多