2011-09-19 109 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

是的,愚蠢的。噢,你是最后一个站立的人。 –

相关问题