当我执行像
这样的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版本。
答案 0 :(得分:2)
第一个查询由Entity Framework生成,它使用TOP(2),但第二个查询是由Linq-to-Sql生成的,它不使用TOP(2)而是检查读取逻辑,如果结果集包含更多超过一个记录(并在那种情况下中止阅读)。