检查 single() LINQ 是否返回 NULL

15

我有一个LINQ查询,应该返回单个结果或没有结果。 我调用Single()来获取结果,就像这样:

var propertyDataSource = (from x in myCollection
                          where SomeCondition(x)
                          select x).Single();

当我的查询只有一个结果时,这个方法可以正常工作,但如果没有结果,它会抛出一个信息为Sequence contains no elementsSystem.InvalidOperationException异常。

我该如何修复这个问题呢?

4个回答

41
请使用SingleOrDefault替代Single。当枚举不包含正好一个元素时,Single会抛出异常,而SingleOrDefault<T>在空枚举上调用时返回default(T)(对于引用类型而言是null)。请注意,如果枚举中有多个元素,则两者都会抛出异常。

8

8

.SingleOrDefault()会返回单个匹配对象或默认值(对于引用类型来说,这是null)。但你需要自己处理null情况,否则很快就会出现NullReferenceException

另外,当使用IEnumerable时,应该使用.Any()而不是.Count() > 0来避免迭代整个数据集。


6

.FirstOrDefault()方法如果没有找到匹配项就返回null(或类型的默认值),.Single()方法则期望只有一个匹配项,如果没有或者多于一个匹配项,则会抛出异常。而.SingleOrDefault()方法如果没有找到匹配项就返回null(或类型的默认值),但是如果有多个匹配项,则也会抛出异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接