C# LINQ查找与父母ID相关的所有孩子

C# LINQ查找与父母ID相关的所有孩子,c#,linq,C#,Linq,在我的数据库中,经验和主题之间有一种多对多的关系 从经验列表中,我将按下特定经验的按钮,然后进入显示与所选经验相关的所有主题的列表。通过按下按钮,我收到了体验的ID 我试过这样的东西,显然不起作用 var subjectList = db.Subjects.Where(s => s.Experiences== id).SelectMany(s => s.Subjects).ToList(); 有人知道如何使用ID查找与体验相关的所有主题,或者有其他方法吗 体验 public vir

在我的数据库中,经验和主题之间有一种多对多的关系

从经验列表中,我将按下特定经验的按钮,然后进入显示与所选经验相关的所有主题的列表。通过按下按钮,我收到了体验的ID

我试过这样的东西,显然不起作用

var subjectList = db.Subjects.Where(s => s.Experiences== id).SelectMany(s => s.Subjects).ToList();
有人知道如何使用ID查找与体验相关的所有主题,或者有其他方法吗

体验

public virtual ICollection<Subject> Subjects { get; set; }
public virtual User ApplicationUser { get; set; }

public Experience()
{
    this.Subjects = new HashSet<Subject>();
}
公共虚拟ICollection主题{get;set;}
公共虚拟用户应用程序用户{get;set;}
公共经验()
{
this.Subjects=newhashset();
}
主题

public virtual ICollection<Experience> Experiences { get; set; }


public Subject()
{
   this.Experiences = new HashSet<Experience>();
}
公共虚拟ICollection体验{get;set;}
公共主题()
{
this.Experiences=newhashset();
}

简单使用
在EF/Linq查询中包含

所以

然后,您可以通过[编辑]
结果访问所有
主题。选择(x=>x.Subjects)
将为您提供
IEnumerable
。可以使用
SelectMany(x=>x)
将其展平

这是假设您的类看起来像:

public class Experience {
    public virtual ICollection<Subject> Subjects {get; set;}
}
公共课堂体验{
公共虚拟ICollection主题{get;set;}
}

通常在多对多关系中,相关的EF类有一个导航属性,表示与每个项关联的对象集合

在示例代码中,您引用了
Subject.Experiences
,但缺少与经验id正确关联的部分

类似这样的操作应该可以实现,其中
id
是所选的体验id:

var subjectList = db.Subjects
    .Where(s => s.Experiences.Any(experience => experience.Id == id))
    .ToList();

使用Include,然后使用Include

 var subjectList = db.Subjects
    .Where(s => s.Experiences== id)
    .Include(s => s.NavigationToMiddleTable)
    .ThenInclude(x => x.RelatedTable)
    .ToList();

请记住,您的实体类必须具有指向MiddleTable和最后一个RelatedTable的导航属性

您是否使用任何框架来连接DB??请发布您的模型、实体框架,您是否需要该
SelectMany
子句?似乎是
主题。其中(…).ToList()应该执行以下操作trick@RufusL谢谢你的回答,但是主题类不包含经验的id在这种情况下,会不会创建一个工作经验列表?因为我需要传递一个主题列表我编辑了我的答案,所以您也可以在
之后立即使用
选择(x=>x.Subjects)
。其中(…
 var subjectList = db.Subjects
    .Where(s => s.Experiences== id)
    .Include(s => s.NavigationToMiddleTable)
    .ThenInclude(x => x.RelatedTable)
    .ToList();