• 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不知道你要根据哪个字段进行倒序排序,所以这样的写法是错误的
     
  • 相关阅读:
    select 1 from ... sql语句中的1代表什么意思?
    装饰者模式
    Dao层抽取BaseDao公共方法
    DBUtils工具类
    java Page分页显示
    QTP
    Gym 100513F Ilya Muromets(前缀和)
    AcWing1165 单词环(01分数规划)
    AcWing904 虫洞(spfa判负环)
    AcWing1148 秘密的奶牛运输(次小生成树)
  • 原文地址:https://www.cnblogs.com/wms01/p/6186135.html
Copyright © 2020-2023  润新知