Mat*_*hew 38 sql linq ienumerable linq-to-objects entity-framework
我们正在实现一些EF数据存储库,我们有一些查询包括 TOP 1
我已经阅读了许多建议使用.Take(1)
我正在审查的代码使用的帖子.First()
我知道这两个都会为对象赋值产生相同的结果,但它们是否实际上都解析为同一个查询?查询数据库时,它实际上是否同时TOP 1用于两个请求?或者他们会将查询完整地执行到可枚举中,然后只需获取集合中的第一个条目?
此外,如果我们使用.FirstOrDefault()那么为什么我们应该期待任何不同的行为?我知道,当使用一个IEnumerable,调用一个.First()在一个空的集合会抛出,但如果这是实际上只更改查询包括TOP 1话,我应该会完全没有功能上的差异之间.First()和.FirstOrDefault()....对不对?
或者,是否有比这些Enumerable扩展更好的方法来执行查询TOP 1?
ken*_*ken 70
来自LINQPad:
C#:
age_Centers.Select(c => c.Id).First();
age_Centers.Select(c => c.Id).FirstOrDefault();
age_Centers.Select(c => c.Id).Take(1).Dump();
Run Code Online (Sandbox Code Playgroud)
SQL:
SELECT TOP (1) [t0].[Id]
FROM [age_Centers] AS [t0]
GO
SELECT TOP (1) [t0].[Id]
FROM [age_Centers] AS [t0]
GO
SELECT TOP (1) [t0].[Id]
FROM [age_Centers] AS [t0]
Run Code Online (Sandbox Code Playgroud)
*注意Take(1)枚举并返回一个IQueryable.
| 归档时间: |
|
| 查看次数: |
25886 次 |
| 最近记录: |