如何将 ICollection 导航属性与 include() 一起使用



我正在尝试使用实体框架核心在控制器中的 web api 项目中获取每个用户及其项目

尝试使用此查询,但它给了我一个空对象

var users = _context.Users.Include(x => x.userProjects.Select(up => up.UserId == x.Id)).ToListAsync();

我也尝试了这个,得到了相同的结果

var users = _context.Users.Include(x => x.userProjects.Where(up => up.UserId == x.Id)).ToListAsync();

这是用户类

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<UserProject> userProjects { get; set; }
}

这是项目类

public class Project
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<User> Users { get; set; }
    public ICollection<UserProject> UserProjects { get; set; }
}

这是用户项目类

public class UserProject
{
    [ForeignKey("User")]
    public int UserId { get; set; }
    public User User { get; set; }
    [ForeignKey("Project")]
    public int ProjectId { get; set; }
    public Project Project { get; set; }
}

我想为每个用户及其项目数组获取一个 json

对于多级包含,您需要ThenInclude

var users = _context.Users
                    .Include(x => x.userProjects)
                        .ThenInclude(y => y.Project)
                    .ToListAsync();
var users = _context.Users.Include(u => u.userProjects)
                          .ThenInclude(up => up.Projects))
                          .Where(u => u.UserId == Id)
                          .ToListAsync();

这里会发生什么:

您将检索具有UserId = yourId的所有用户以及这些用户的所有UserProjectsProjects

显示您可以访问第一个返回用户的所有项目的代码示例:

var projectsForFirstUser = users.First().Select(x => x.UserProjects).Select(x => x.Project).ToList();

编辑:由于EF Core,修改为ThenInclude

最新更新