You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework Core中如何从关联数据获取指定属性?

解决方案:仅查询关联表指定字段并填充DTO

1. 定义对应DTO类

先创建适配一对多关系的DTO,只保留业务需要的字段:

// 用户DTO:仅包含需要的FirstName和LastName
public class UserDto
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

// 分组DTO:包含分组基础信息和用户DTO列表
public class GroupDto
{
    public int GroupID { get; set; }
    public string GroupName { get; set; }
    public List<UserDto> Users { get; set; }
}

2. 使用LINQ投影查询并填充DTO

不需要用Include(它会加载全量User实体),直接通过嵌套Select做投影,EF会自动生成仅查询所需字段的SQL:

public IEnumerable<GroupDto> GetAllUserGroups()
{
    var groups = _dbContext.Group
                          .Select(g => new GroupDto
                          {
                              GroupID = g.GroupID,
                              GroupName = g.GroupName,
                              // 嵌套Select将User实体转换为UserDto列表
                              Users = g.Users.Select(u => new UserDto
                              {
                                  FirstName = u.FirstName,
                                  LastName = u.LastName
                              }).ToList()
                          })
                          .ToList();

    return groups;
}

补充说明

  • 这种方式避免加载冗余字段(比如User的Email、UserID),能显著提升查询性能。
  • 如果项目使用AutoMapper等映射工具,也可以通过ProjectTo方法简化投影代码,但手动编写Select是无额外依赖的最直接方案。

内容的提问来源于stack exchange,提问作者GoGoAllen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:00:17