首页 > 解决方案 > 如何通过 include() 使用 ICollection 导航属性

问题描述

我正在尝试使用带有 linq 的控制器中的 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; }
}

这是 UserProject 类

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 及其项目数组

标签: c#linqentity-framework-core

解决方案


对于多级包含,您需要ThenInclude.

var users = _context.Users
                    .Include(x => x.userProjects)
                        .ThenInclude(y => y.Project)
                    .ToListAsync();

推荐阅读