Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ICollection导航属性与include()一起使用_C#_Linq_Entity Framework Core - Fatal编程技术网

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

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 =>

我正试图让每个用户在控制器中使用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 => 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();