LINQ 查询 EF Core 多对多关系

LINQ Query on EF Core many-to-many relationship

我在 Entity Framework Core 5 中建立了以下多对多关系模型(按照惯例):

  public class Task
  {
    public int Id { get; set; }
    public DateTime EndDateTime { get; set; }
    public string Notes { get; set; }

    // Relationships
    public ICollection<TaskOwner> OwnersLink { get; set; }
  }

  public class TaskOwner
  {
    public int TaskId { get; set; }
    public int OwnerId { get; set; }
    public Status Status { get; set; }

    // Relationships
    public Task Task { get; set; }
    public Owner Owner { get; set; }
  }

  public class Owner
  {
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

    // Relationships
    public ICollection<TaskOwner> TasksLink { get; set; }
  }

如何使用流畅的 LINQ 语法(例如 _dbContext.Owners.Where(s => s.Id == 1);)构造一个查询,以便 return 所有没有任何所有者的任务?

var tasksWithoutOwner = ctx.Tasks
   .Where(x => ctx.TaskOwners.Any(y => y.TaskId == x.Id) == false);

到 return 所有没有任何所有者的任务都试试这个

 var tasks= _dbContext.Tasks
.Where(t => !_dbContext.TaskOwners.Any(to => to.TaskId == t.Id))
.ToList();

到目前为止给出的两个答案错过或忽略了您拥有此导航的事实 属性 Task.OwnersLink。您所要做的就是检查它是否不包含任何项目。

_dbContext.Tasks.Where(t => !t.OwnersLink.Any())

看起来差别很小,但是当查询变大时,很容易在这些不必要的手动“连接”中出错,例如 o => o.TaskId == t.Id