微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用Entity Framework更好地对“ OP 1”使用.First或.Take1吗?

LINQPad

age_Centers.Select(c => c.Id).First();
age_Centers.Select(c => c.Id).FirstOrDefault();
age_Centers.Select(c => c.Id).Take(1).Dump();

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

解决方法

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。