我正在尝试使用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();
这是User类
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<UserProject> userProjects { get; set; }
}
这是Project类
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
答案 0 :(得分:0)
var users = _context.Users.Include(u => u.userProjects)
.ThenInclude(up => up.Projects))
.Where(u => u.UserId == Id)
.ToListAsync();
这里发生了什么
您将检索具有UserId = yourId
的所有用户以及这些用户的所有UserProjects
和Projects
。
显示您可以访问第一个返回用户的所有项目的代码示例:
var projectsForFirstUser = users.First().Select(x => x.UserProjects).Select(x => x.Project).ToList();
编辑:由于EF Core,已修改为ThenInclude
。
答案 1 :(得分:0)
对于多个级别的包含,您需要ThenInclude
。
var users = _context.Users
.Include(x => x.userProjects)
.ThenInclude(y => y.Project)
.ToListAsync();