SQL LEFT OUTER JOIN COUNT () GROUPBY преобразован в Entity Framework - PullRequest
0 голосов
/ 17 октября 2018

Я работаю в .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

Последнее ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ - моя проблема.Я не нашел решение, которое работает хорошо.Вот заявление 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 секунд.Должен быть лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...