【问题标题】:Regarding FirstOrDefault or SingleOrDefault关于 FirstOrDefault 或 SingleOrDefault
【发布时间】:2011-07-11 13:49:22
【问题描述】:

FirstOrDefault 或 SingleOrDefault 会返回什么样的数据。

假设我的查询返回 3 条记录

empid  ename  salary
-----  -----  ------
1      joy    1500
2      rob    4500
3      jen    6500

所以如果我们使用 FirstOrDefault 或 SingleOrDefault 那么我会得到什么样的结果集。请举例说明。谢谢

【问题讨论】:

    标签: c# linq


    【解决方案1】:
                    | 0 values    | 1 value     | > 1 value
    FirstOrDefault  | Default     | First value | First value
    SingleOrDefault | Default     | First value | Exception
    

    并将此表扩展到整个集合:

                    | 0 values    | 1 value     | > 1 value
    First           | Exception   | First value | First value
    FirstOrDefault  | Default     | First value | First value
    Single          | Exception   | First value | Exception
    SingleOrDefault | Default     | First value | Exception
    Last            | Exception   | Last value  | Last value
    LastOrDefault   | Default     | Last value  | Last value
    

    这是另一个版本,其中包含一些具体值以使其更清晰:

                    | []          | [1]         | [1,2,3]
    First           | Exception   | 1           | 1
    FirstOrDefault  | 0           | 1           | 1
    Single          | Exception   | 1           | Exception
    SingleOrDefault | 0           | 1           | Exception
    Last            | Exception   | 1           | 3
    LastOrDefault   | 0           | 1           | 3
    

    【讨论】:

    • 在您的帮助下我完全无法理解。而是解释会更好....谢谢
    • @user72 :你不明白什么?桌子晶莹剔透。
    • @user728750 :使用您的数据样本,FirstOrDefault 会给您“快乐”,SingleOrDefault 会抛出异常。
    【解决方案2】:

    SingleOrDefault 将返回异常,因为它等待获取一条记录或没有记录,FirstOrDefault 将返回第一条记录 (1 joy 1500) 您可以使用 SingleOrDefault 当您的 where 包含在您的情况下将返回记录的条件时 - where empid == 1 显然您只想要一个 ID 为 1 的数据库记录

    【讨论】:

    • 谢谢...给我一个 SingleOrDefault 的小样本。我需要知道将使用 SingleOrDefault 什么样的情况。请提供样品。
    • 你可以使用 SingleOrDefault 当你的 where 包含一个条件,在你的情况下会直接返回记录 - 其中 empid == 1 显然你只想要一个 ID 为 1 的数据库记录
    【解决方案3】:

    FirstOrDefault 将返回第一个元素和默认值(值类型的默认值和引用类型的 null)如果没有元素存在。

    如果只有一个元素,SingleOrDefault 将返回该元素。如果不存在则默认,如果查询中有多个元素则抛出异常。

    在您的情况下,FirstOrDefault 将返回第一个元素。 而 SingleOrDefault 会抛出异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2010-12-17
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多