不明确的LINQ to SQL映射

时间:2010-07-21 14:23:23

标签: linq-to-sql

我正在调查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会得到优化吗?

2 个答案:

答案 0 :(得分:0)

该查询存在“无”错误,如果您担心的话,它不会对行进行两次COUNT。

答案 1 :(得分:0)

  

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

比较“最佳”sql和生成的sql的执行计划。 (Sql Studio - 点击“显示估计执行计划”)


通过检查和绘制我多年来点击该按钮 - 生成的子查询根本没有任何问题。

即使这个查询也应该没问题(意思是:不需要额外的费用)

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