Я изучаю способ сопоставления LINQ с SQL, и у меня возникают некоторые проблемы с получением простой вещи.
Существует таблица sessions
, которая содержит одну строку на имя пользователя.Рассмотрим следующий SQL
SELECT COUNT(*) AS c
FROM sessions
GROUP BY sessions.user_id
ORDER BY c DESC
Я использую LINQPad для тестирования преобразований LINQ-to-SQL.
Прямолинейный
from s in Sessions group s by s.User_id into logins
orderby logins.Count() descending
select new { c = logins.Count() }
дает мне
SELECT [t1].[value2] AS [c]
FROM (
SELECT COUNT(*) AS [value], COUNT(*) AS [value2]
FROM [sessions] AS [t0]
GROUP BY [t0].[user_id]
) AS [t1]
ORDER BY [t1].[value] DESC
Модифицированный
(from s in Sessions group s by s.User_id into logins
select new { c = logins.Count() }).OrderByDescending(v => v.c)
сопоставляется с
SELECT [t1].[value2] AS [c]
FROM (
SELECT COUNT(*) AS [value], COUNT(*) AS [value2]
FROM [sessions] AS [t0]
GROUP BY [t0].[user_id]
) AS [t1]
ORDER BY [t1].[value] DESC
Я просто не могу получить этот оптимальный вывод.Есть ли способ?
Или, может быть, мне не стоит беспокоиться, так как SQL все равно будет оптимизирован?