如何从多对多关系中检索实体列表?

时间:2011-04-11 13:39:49

标签: c# linq entity-framework-4 many-to-many

我正在尝试从我的数据库中检索List<Student>

基本上,架构是:

GradeParalelo ---- GradeStudent ---- Student

GradeStudent表包含GradeParalelo和Student的主键。 注意:GradeStudent表有一个额外的列来保存整数。这不仅仅是一个关联表。

这是我到目前为止所尝试的内容:

ColegioDBV2Entities db = new ColegioDBV2Entities();
public List<Student> FindAllStudentsFromGradeParalelo(int gradeParaleloId)
{
    return (db.Students
           .Include("GradeStudents")
           .Include("GradeStudents.GradeParalelo")
           .Where<Student>(s => s.StudentId == gradeParaleloId)).ToList();
}

但它正在检索我选择的每个年级的单一学生。可以理解,因为我正在将StudentId与GradeParaleloId进行比较。 这不是我想要的。

有人可以建议一种方法来检索这个集合吗?

我想要使用GradeParalelo ID 6检索GradeStudent表中所有学生的图片。

基本上,这是一种更优雅的形式:

public List<Student> FindAllStudentsFromGradeParalelo(int gradeParaleloId)
{
    List<Student> students = new List<Student>();

    using(GradeStudentRepository repo = new GradeStudentRepository())
    {
        var items = repo.FindAllGradeStudents().Where(g => g.GradeParaleloId == gradeParaleloId);

        StudentRepository studentRepo = new StudentRepository();
        foreach (var o in items)
        {
            students.Add(studentRepo.FindStudent(o.StudentId));
        }
    }

    return students;
}

2 个答案:

答案 0 :(得分:3)

怎么样

return db.GradeParaleloes.Single(g => g.GradeParaleloId == gradeParaleloId)
                         .GradeStudents.Select(s => s.Student).ToList();

答案 1 :(得分:1)

这是一个简单的查询:

return
    db.Students
        .Where( x => x.GradeParalelo.gradeParaleloId == gradeParaleloId )
        .ToList();

如果你有正确的FK,你只需要调用FK,在内部它将链接所有需要的表。