C# 如何将ICollection导航属性与include()一起使用
我正试图让每个用户在控制器中使用linq的web api项目中使用entity framework core来完成其项目 我尝试了这个查询,但它给了我一个空对象C# 如何将ICollection导航属性与include()一起使用,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,我正试图让每个用户在控制器中使用linq的web api项目中使用entity framework core来完成其项目 我尝试了这个查询,但它给了我一个空对象 var users = _context.Users.Include(x => x.userProjects.Select(up => up.UserId == x.Id)).ToListAsync(); 我也试过这个,得到了同样的结果 var users = _context.Users.Include(x =>
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; }
}
我想为每个用户获取一个json及其项目数组
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,修改为包含。对于多级包含,您需要包含
这不应该只是_context.Users.Includex=>x.userProjects.toListSync吗?或者你想进入多对多的另一边?@CamiloTerevinto我想要类似[{user obj here,[{projects of the user}]}]的东西,Where语句不起作用,因为我只获取用户的属性。你能提供更多细节吗?返回的变量通常为用户类型。如果你想访问项目,请看第二段代码。我没有得到where语句,因为UserId属性在userProject类中,Id属性在user类中,当我使用where语句时,我只能得到用户属性。我得到的是一个不完整的json![{id:1,名称:Khaled,用户项目:[{userId:1,,,,为什么会停止?@Khaled根据提供的信息我无法判断,但它与EF core无关,除非有例外情况,首先感谢您的回答,它是正确的。我不知道是什么问题,但其他人也有同样的问题,并使用以下方法修复了它:services.AddMvc.AddJsonOptionsoptions=>options.SerializerSettings.ReferenceLoopHandling=Newtonsoft.Json.ReferenceLoopHandling.Ignore;在启动类的配置方法中
var users = _context.Users.Include(u => u.userProjects)
.ThenInclude(up => up.Projects))
.Where(u => u.UserId == Id)
.ToListAsync();
var projectsForFirstUser = users.First().Select(x => x.UserProjects).Select(x => x.Project).ToList();
var users = _context.Users
.Include(x => x.userProjects)
.ThenInclude(y => y.Project)
.ToListAsync();