如何解决使用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 举报,一经查实,本站将立刻删除。