检查single()LINQ是否返回NULL

时间:2014-01-17 21:29:43

标签: c# linq

我有一个LINQ查询,它应返回单个结果或不返回结果。我打电话给Single()得到如下结果:

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

当我的查询只有一个结果时,这可以正常工作,但是如果没有结果,它会抛出System.InvalidOperationException消息序列不包含任何元素

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:27)

改为使用SingleOrDefault

当枚举不包含一个元素时,

Single抛出异常,SingleOrDefault<T>在空枚举上调用时返回default(T)(对于引用类型为null) 。请注意,如果枚举中有多个元素,则两者都将抛出。

答案 1 :(得分:7)

.SingleOrDefault()将返回单个匹配对象或默认值(对于引用类型为null。您必须自己处理null案例,因为您最终会很快就有了NullReferenceException

作为旁注,您应该使用.Any()而不是.Count() > 0来避免在使用IEnumerable时迭代整个数据集。

答案 2 :(得分:5)

按照设计,Single将在序列为空时抛出异常。当序列为空时,使用SingleOrDefault返回null

答案 3 :(得分:5)

.FirstOrDefault()如果不存在则返回null(或类型的默认值)(未找到匹配项),.Single()将完全匹配一个匹配项。如果没有任何内容,.SingleOrDefault()将返回null(或类型的默认值),但如果您有多个匹配项,则会抛出异常。