Оставьте соединение в Entity Framework Core - PullRequest
0 голосов
/ 18 февраля 2020

Использование 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
  });

Но мне нужно чтобы получить все проекты, пользователь является участником или не участником.

В проектах, где пользователь не является участником, я бы установил RoleId и UserId на null.

По сути, я думаю, что это будет левое соединение ...

Как это можно сделать с помощью лямбда-выражения в Linq to Entities?

...