2014-01-17 132 views
8

我有一个LINQ查询,应该返回一个单一的结果或不结果。我打电话Single()得到的结果是这样的:检查是否单个()LINQ返回NULL

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

这工作好,当我查询有一个结果,但如果没有结果,它抛出与序列不包含任何元素的消息System.InvalidOperationException

我该如何解决这个问题?

回答

7

.SingleOrDefault()将返回一个匹配对象或默认值(这是null对于引用类型,你将不得不虽然自己处理null情况下,因为你有NullReferenceException很快结束了。

由于一个侧面说明,你应该使用.Any()而不是.Count() > 0,以避免在你的整个数据集采用迭代IEnumerable■当。

5

.FirstOrDefault()如果什么都不存在(如果没有找到匹配项),则返回null(或类型的默认值),.Single()将预期只有一次匹配。如果没有任何东西存在,.SingleOrDefault()将返回null(或类型的默认值),但如果您有多个匹配项,则会抛出异常。