c# - 如何通过 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 及其项目数组
解决方案
对于多级包含,您需要ThenInclude
.
var users = _context.Users
.Include(x => x.userProjects)
.ThenInclude(y => y.Project)
.ToListAsync();
推荐阅读
- typescript - Ionic 4:Ionic Lab 黑屏错误的解决方法
- python - Kivy 未正确显示(孟加拉语)Unicode 字符
- javascript - 无法解析 json 数据 jquery
- ios - 是否可以在 iOS 中实现对操作系统权限提示的分析?
- c# - .Net Web API 以毫秒为单位绑定日期时间
- google-cloud-platform - 使用不同的传出 IP 执行多个 Google Cloud Functions 的正确方法是什么?
- flutter - 从 IBM Watson 下载 CoreML 文件时出错
- excel - 使用列表中的名称创建新工作表
- rabbitmq - 使用 request-reply 和 pub-sub 进行微服务通信
- python - 针对工作日字符串使用 Pandas .corr