关于FirstOrDefault或SingleOrDefault

Mou*_*Mou 5 c# linq

FirstOrDefault或SingleOrDefault将返回什么样的数据.

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

empid  ename  salary
-----  -----  ------
1      joy    1500
2      rob    4500
3      jen    6500
Run Code Online (Sandbox Code Playgroud)

因此,如果我们使用FirstOrDefault或SingleOrDefault,那么我将得到什么样的结果集.请举例说明.谢谢

Ric*_*lay 35

                | 0 values    | 1 value     | > 1 value
FirstOrDefault  | Default     | First value | First value
SingleOrDefault | Default     | First value | Exception
Run Code Online (Sandbox Code Playgroud)

并将此表扩展到整个集:

                | 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
Run Code Online (Sandbox Code Playgroud)

这是另一个具有一些具体值的版本,以使其更清晰:

                | []          | [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
Run Code Online (Sandbox Code Playgroud)

  • @ user72:你不明白什么?桌子很清晰. (8认同)
  • @ user728750:使用您的数据样本,`FirstOrDefault`将为您提供"欢乐",而'SingleOrDefault`将抛出异常. (2认同)

kle*_*had 3

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