2014-01-17 184 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(或類型的默認值),但如果您有多個匹配項,則會拋出異常。