4

DBA 告诉我,在使用 T-SQL 时:

select count(id) from tableName

select count(*) from tablenName

如果 id 是主键。

将其推断到 LINQ-TO-SQL 是否准确?

此 LINQ-to-SQL 语句:

int count = dataContext.TableName.Select(primaryKeyId => primaryKeyId).Count();

比这个更高效:

int count = dataContext.TableName.Count();
4

2 回答 2

6

select count据我了解,您的两个陈述之间没有区别。

使用 LINQPad,我们可以检查不同 LINQ 语句生成的 T-SQL。

对于 Linq to SQL 两者

TableName.Select(primaryKeyId => primaryKeyId).Count();

TableName.Count();

生成相同的 SQL

SELECT COUNT(*) AS [value] FROM [dbo].[TableName] AS [t0]

对于 Linq to Entites,它们再次生成相同的 SQL,但现在是

SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[TableName] AS [Extent1]
)  AS [GroupBy1]
于 2012-04-20T16:10:12.483 回答
0

我知道这是一个旧的,但要小心 sql server!Count 不计算空值,因此如果您的主键字段可以为空,则这两个语句可能不等价。看

create table #a(col int null)

insert into #a values (null)

select COUNT(*) 
from #a;

select COUNT(col)
from #a;
于 2014-07-21T12:05:46.953 回答