小编典典

使用Entity Framework更好地对“ OP 1”使用.First()或.Take(1)吗?

sql

我们正在实现一些EF数据存储库,并且存在一些查询,其中包括 TOP 1

我已经阅读了许多建议使用.Take(1)
的帖子我正在审查的代码使用.First()

我知道这两个对象分配都产生相同的结果,但是它们实际上都解析为相同的查询吗?当查询数据库时TOP 1,两个请求实际上都可以使用吗?还是他们将对枚举完全执行查询,然后简单地将集合中的第一个条目录入?

此外,如果我们使用过,.FirstOrDefault()那为什么还要期待任何不同的行为呢?我知道,当使用一个IEnumerable,调用一个.First()在一个空的集合会抛出,但如果这
实际上只更改查询包括TOP 1话,我应该会之间绝对没有任何功能上的差异.First().FirstOrDefault()....对不对?

或者,是否有比这些可枚举范围更好的方法来使查询执行TOP 1


阅读 173

收藏
2021-03-17

共1个答案

小编典典

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();

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]

*请注意,该方法Take(1)枚举并返回IQueryable

2021-03-17