关于FirstOrDefault或SingleOrDefault

时间:2011-07-11 13:49:22

标签: c# linq

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

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

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

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

3 个答案:

答案 0 :(得分:35)

                | 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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

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

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