SQL LEFT OUTER JOIN COUNT() GROUPBY преобразован в Entity Framework

58
5

Я работаю в.NET Core 2.0 MVC с Entity Framework, и я пытаюсь преобразовать инструкцию SQL в запрос EF. Вот исходный SQL:

SELECT
t.LastName, FirstName, t.teacherId
,courseCode
,classSection
,roomId
,number
,DayID
,periodId
FROM Classes cl
INNER JOIN Courses cr on cr.courseId = cl.courseId
INNER JOIN vwClassSchedule cs on cs.ClassId = cl.classId
LEFT OUTER JOIN Teachers t on t.TeacherID = cl.teacherId
LEFT OUTER JOIN(select classid, count(classid) as number
from CourseEnrollment group by classId) ce on cl.classId = ce.classId
order by LastName, dayId, periodId

Последний LEFT OUTER JOIN - моя проблема. Я не нашел решения, которое хорошо работает. Вот выражение EF, которое я придумал до сих пор:

var Courses = _Context.Classes
.Include(t => t.Teachers)
.Include(c => c.Courses)
.Include(s => s.ClassSchedule)
.OrderBy(t => t.Teachers.LastName)
.ThenBy(s => s.ClassSchedule.DayID)
.ThenBy(s => s.ClassSchedule.PeriodID)
.Select(p => new ClassDTO
{
TeacherId = p.teacherId,
FirstName = p.Teachers.FirstName,
LastName = p.Teachers.LastName,
Course = p.Courses.courseCode,
Section = p.classSection,
Room = p.roomId,
Students = 0,
Day = p.ClassSchedule.DayID,
Block = p.ClassSchedule.PeriodID,
ClassId = p.classId
})
.ToList();

Единственное работоспособное решение, которое я придумал, - это пробить результат Курсов и рассчитать количество учеников для каждого результата, и это огромный убийца. Исходный SQL работает под вторым, тогда как мой второй цикл занимает почти 30 секунд. Там должен быть лучший путь.

спросил(а) 2018-10-17T18:23:00+03:00 2 года, 1 месяц назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема