First,FirstOrDefault,Single,SingleOrDefault的区别

 

操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素
First 抛异常 返回该元素 返回第一个元素
FirstOrDefault 返回default(TSource) 返回该元素 返回第一个元素
Last 抛异常 返回该元素 返回最后一个元素
LastOrDefault 返回default(TSource) 返回该元素 返回最后一个元素
Single 抛异常 返回该元素 抛异常
SingleOrDefault 返回default(TSource) 返回该元素 抛异常
 我们拿事实说话:使用SQL Server Profilter进行SQL监视
在EF或者NH中查询单条数据的时候
1、First()扩展方法得到的是这个:
2、FirstOrDefault()扩展方法和FirstOrDefault()得到的监视是一样的,它俩的区别只是FirstOrDefault有个默认的值而已
3、Single()扩展方法得到的监视图:
 
 
那为什么Single()取得是TOP2而不是TOP1呢?这是一个聪明的做法,因为Single()取的是唯一的数据,取TOP2的话,假如表中有两条一模一样的数据,取得话就会得到两条数据,这样就会报错,那就说明了一个问题:你的表数据可能存在问题。
3、SingleOrDefault() 得到的监视图和Single()是一样的,也进行重复判断,如果查询集合为空,则返回该类型的默认值,类似FirstOrDefault();
  我一般使用SingleOrDefault()进行登录操作,这样操作比较好一些
4、对于Last()和LastOrDefault(),在EF中并不支持这样的写法,虽然这样写编译能够通过,但是调试的时候回报错的,可以使用OrderBy和First()/FirstOrDefault()结合得到类似效果,
为什么这样的写法不支持呢?因为EF不知道你要根据哪个字段进行倒序排序,所以这样的写法是错误的
 

posted on   Jade_K  阅读(884)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示