当使用Single()时,Linq2Sql生成的sql是否包含Top?

时间:2012-04-25 03:48:04

标签: linq-to-sql c#-4.0 entity-framework-4

当我执行像

这样的Linq2Sql查询时
db.Items.Single(it => it.Id == 1)

有些人坚持认为生成的sql就像

select TOP (2) [t0].Id, [t0].Name
from [dbo].[SomeTable] as [t0]
where [t0].Id = @p0

但我从Sql Server Profiler(以及Linqpad的sql窗口和VS IntelliTrace窗口)获得的内容显示sql不包含任何TOP,只是简单

select [t0].Id, [t0].Name
from [dbo].[SomeTable] as [t0]
where [t0].Id = @p0

Linq版本重要吗?我正在使用.Net framework 4.0,并引用了System.Data.Linq dll的4.0版本。

1 个答案:

答案 0 :(得分:2)

第一个查询由Entity Framework生成,它使用TOP(2),但第二个查询是由Linq-to-Sql生成的,它不使用TOP(2)而是检查读取逻辑,如果结果集包含更多超过一个记录(并在那种情况下中止阅读)。