检查single()LINQ是否返回NULL

Min*_*iel 12 c# linq

我有一个LINQ查询,应返回单个结果或不返回结果.我打电话Single()来得到这样的结果:

var propertyDataSource = (from x in myCollection
                          where SomeCondition(x)
                          select x).Single();
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能解决这个问题?

Mar*_*zek 33

SingleOrDefault改用.

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


dee*_*see 7

.SingleOrDefault()将返回单个匹配对象或默认值(null用于引用类型.你必须自己处理这个null案例,因为你最终会NullReferenceException非常快.

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


Dou*_*las 6

通过设计,Single当序列为空时将抛出异常.用于在序列为空时SingleOrDefault返回null.


AD.*_*Net 5

.FirstOrDefault()返回null(或类型的默认值)如果不存在(找不到匹配项),.Single()则只需要一个匹配项..SingleOrDefault()如果没有,则返回null(或类型的默认值)但如果有多个匹配则抛出异常.