Как я могу получить список сущностей из множества отношений? - PullRequest
1 голос
/ 11 апреля 2011

Я пытаюсь получить 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. Это не то, что я хочу.

Кто-нибудь может предложить способ получения этой коллекции?

Изображение, которое я хочу получить для всех учеников в таблице GradeStudent с идентификатором GradeParalelo 6.

В основном это в более элегантной форме:

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 ]

3 голосов
/ 11 апреля 2011

Как насчет

return db.GradeParaleloes.Single(g => g.GradeParaleloId == gradeParaleloId)
                         .GradeStudents.Select(s => s.Student).ToList();
1 голос
/ 11 апреля 2011

это простой запрос как:

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

если у вас есть права на FK, вам просто нужно позвонить в FK, и он внутренне свяжет все необходимые таблицы.

...