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

时间:2018-06-14 20:40:41

标签: c# linq

我的数据库中经验和主题之间有很多关系。

从经验列表中,我将按下按钮以获得特定体验,然后进入列表,显示与所选体验相关的所有主题。按下按钮我会收到体验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>();
}

主题

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


public Subject()
{
   this.Experiences = new HashSet<Experience>();
}

3 个答案:

答案 0 :(得分:0)

在EF / Linq查询中简单使用Include

所以

var results = ctx.Experiences.Include(e => e.Subjects).Where(e => e.Id == _id);

然后您可以通过[编辑] Subjects访问所有results.Select(x => x.Subjects),这将为您提供IEnumerable<IEnumerable<Subjects>>。它可以使用SelectMany(x => x)展平。

这假设您的课程类似于:

public class Experience {
    public virtual ICollection<Subject> Subjects {get; set;}
}

答案 1 :(得分:0)

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

在您的示例代码中,您引用了Subject.Experiences,但是您错过了正确关联体验ID的文章。

这样的事情可以解决问题,其中id是选定的经验ID:

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

答案 2 :(得分:0)

使用Include和ThenInclude

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

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