Итог: потому что SQL не может возвращать вложенные наборы результатов.
Каждый оператор SQL SELECT
возвращает плоский список значений. LINQ может возвращать графы объектов, то есть объекты с вложенными объектами. Это именно то, что делает LINQ GroupBy
.
В SQL оператор GROUP BY
возвращает только столбцы группировки и агрегированные результаты:
SELECT StandardId, COUNT(*)
FROM Students
GROUP BY StandardId;
Остальные столбцы студентов
Оператор LINQ GroupBy
возвращает что-то вроде
StandardId
StudentId StudentName
1
21 "Student1"
15 "Student2"
2
48 "Student3"
91 "Student4"
17 "Student5"
Следовательно, оператор SQL GROUP BY
никогда не может быть источником для LINQ GroupBy
.
Entity Framework (6) знает это и генерирует оператор SQL, который извлекает все необходимые данные из базы данных, добавляет некоторые части, которые упрощают группировку, и создает группировку на стороне клиента.