实体框架核心中的左联接

问题描述 投票:0回答:1

使用Entity Framework Core 3.1,我具有以下实体:

public class Project {
   public Int32 ProjectId { get; set; }
   public ICollection<Member> Members { get; set; }
}

public class Role {
   public Int32 RoleId { get; set; }
   public ICollection<Member> Members { get; set; }
}

public class User {
   public Int32 UserId { get; set; }
   public ICollection<Member> Members { get; set; }
}

public class Member {
   public Int32 ProjectId { get; set; }
   public Int32 UserId { get; set; }
   public Int32 RoleId { get; set; }
   public Project Project { get; set; }
   public User User { get; set; }
   public Role Role { get; set; }
}

我正在获得具有UserId=1用户的成员所在的项目:

projects
  .SelectMany(y => y.Members, (Project, Member) => new { Project, Member }) 
  .Where(y => y.Member.UserId == 1)
  .Select(y => new {
    ProjectId = y.ProjectId,
    RoleId = y.Member.RoleId,
    UserId = y.Member.UserId
  });

但是我需要获取所有项目,或者用户是成员还是不是成员。

在用户不是成员的项目中,我将RoleIdUserId设置为null

基本上我认为这将是左联接...

如何使用Linq to Entities中的lambda表达式来完成此操作?

entity-framework-core linq-to-entities entity-framework-core-3.0 entity-framework-core-3.1
1个回答
0
投票

您可以这样尝试:

projects.Select(y =>
{ 
    var user = y.Members.FirstOrDefault(c => c.UserId == 1);
    return new
    {
        ProjectId = y.ProjectId,
        RoleId = user?.RoleId,
        UserId = user?.UserId
    };
});
© www.soinside.com 2019 - 2024. All rights reserved.