2011-09-19 135 views
3

根據針對同一問題給出的回答:How to check IEnumerable<DataRow> returns null or has any row?以及我發現的大部分google結果,您都應該使用.Any()驗證集合是否至少包含一個項目。如何檢查空的IEnumerable <DataRow>集合?

但是,在下面的代碼中,.Any()會拋出「未設置爲對象實例的對象引用」異常。有人能指出我做錯了什麼嗎?

DataSet navData = GetNavigationData(); 
bool linkFound = false; 

if(!CommonLibrary.IsDataSetEmpty(navData)) 
{ 
    IEnumerable<DataRow> foundLinks = from link in navData.Tables[0].AsEnumerable() 
            where link.Field<string>("URL").ToLower() == searchURL 
            select link; 

    linkFound = (foundLinks.Any()); 
} 

顯示出異常從任何()調用來有關堆棧跟蹤:

at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext() 
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source) 
at MyMethod in MySource.cs:line 259 
+2

出於好奇,爲什麼圍繞'Any()'調用的括號? – BoltClock

+3

@bolt:布爾伏都教。它實際上是'(false!= x.Any())'的簡稱' –

+1

什麼是異常類型? –

回答

5

你的問題不在於Any()就是問題所在。你的問題是你試圖訪問你的查詢字段最有可能返回null

我會檢查navData是不是null和表不是空的nullTables[0]不爲空。 Any()使用延遲執行,所以當你分配你的查詢時,它不一定會得到處理,直到它被請求,這恰好是Any()被調用時。因此,查詢的任何問題在實際迭代之前都不會顯示出來。

+0

是的,從頭開始。我不排除ConnectionString問題。 –

+0

好吧,爲什麼downvote?如果你打算至少說出原因。 –

+0

是的,愚蠢的。噢,你是最後一個站立的人。 –

相關問題