最近开始使用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
You must be logged in to post a comment.