Как сделать запрос в .NET EF Core с Linq? - PullRequest
0 голосов
/ 19 сентября 2019

My EF Diagram

Привет, у меня есть таблица / модель отношений, как на картинке выше.

Учитель может пройти несколько тренингов.Тренинг / курс может быть формальным или нет.У учителя может быть много учеников.

Теперь я хочу получить список учеников, чей учитель прошел курс, в котором IsFormalTraining == true.

Как это сделать в .NET EF Core 2.2?

Отредактировано:

Модели:

Teacher
{
    int Id;
    string Name;
    ICollection<TeacherStudent> students ; 
}

TeacherStudent{
    int Id;
    int TeacherId;
    int StudentId;
}

Student {
    int Id;
    string Name;
}

TeacherTraining{
    int Id;
    int TeacherId;
    int CourseId;
    DateTime StartDate;
}

Course {
    int Id;
    string Name;
}

1 Ответ

1 голос
/ 19 сентября 2019

Я делаю несколько предположений, основанных на ваших классах, поэтому вам, возможно, потребуется протестировать и настроить, но я думаю, что это будет выглядеть примерно так:

var students = 
    context.Students.Where(s => 
      context.Teachers.Any(t => 
        t.Students.Any(st => st.StudentId == s.Id) && context.TeacherTraining.Any(tt => 
            tt.TeacherId == t.Id && 
            context.Course.Any(c => tt.CourseId == c.Id && c.IsFormalTraining))));

Я не могу отладитьэто без фальсификации тонны вещей, так что вам, возможно, придется пройти через это.Вы также можете разбить это на несколько запросов, их будет легко читать и т. Д., Но, вероятно, это будет не очень эффективно (да, я не знаю, насколько это эффективно без выполнения теста).

...