Linq to sql 不明确的LINQ到SQL映射

Linq to sql 不明确的LINQ到SQL映射,linq-to-sql,Linq To Sql,我正在研究LINQ映射到SQL的方式,在获取一个简单的东西时遇到了一些困难 有一个表会话,它为每个用户登录保存一行。考虑下面的SQL SELECT COUNT(*) AS c FROM sessions GROUP BY sessions.user_id ORDER BY c DESC 我正在使用LINQPad测试LINQ到SQL的转换 海峡前进 from s in Sessions group s by s.User_id into logins orderby lo

我正在研究LINQ映射到SQL的方式,在获取一个简单的东西时遇到了一些困难

有一个表会话,它为每个用户登录保存一行。考虑下面的SQL


SELECT COUNT(*) AS c
FROM sessions
GROUP BY sessions.user_id
ORDER BY c DESC
我正在使用LINQPad测试LINQ到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是否会得到优化?

该查询没有问题,如果您担心的是这样的话,它不会对行进行两次计数

或者,也许我不应该担心SQL会得到优化

比较最佳sql和生成的sql的执行计划。Sql Studio-单击显示估计的执行计划

通过检查并借鉴我多年来点击该按钮的经验,生成的子查询根本不存在任何问题

即使是这个查询也应该是很好的意思:不需要额外的io

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 

林克就是这样点餐的。实际的查询生成器将对此进行优化。我很确定,如果您手动优化该查询,它将给出完全相同的查询执行计划。