FirstOrDefault和SingleOrDefault区别

最近开始使用LINQ,总是不经意就遇到Sequence contains more than one element异常,归根到底是对FirstOrDefault方法和SingleOrDefault方法理解错误了。这里重新总结一下。

FirstOrDefault方法只有在集合只包含0个或者1个元素的时候才起作用,否则就抛异常。SingleOrDefault方法则是不管集合里有多少元素都能工作。因此,什么时候用First什么时候用Single,完全由业务需求决定。如果你很明确你的查询最多只有一条结果,用SingleOrDefault方法。如果你知道你的查询会返回一大堆数据,但是你只要第一个返回的数据,那用FirstOrDefault()。

StackOverflow上有个图表,解释的更清晰:

                | 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

Leave a Reply

Your email address will not be published. Required fields are marked *