2010-12-16 68 views
2

dataContext.Geo_Countries.Where(c => c.Name.Contains(searchKey))。ToList();当IQueryable不返回任何记录时ToList()抛出异常

当IQueryable返回没有记录我得到一个值为null的异常。

解决方案是什么?

+0

有别的事情上,然后,因为通常你不应该得到的声明空例外您发布除非DataContext的或Geo_Countries为空。您可能需要发布更多信息,例如您正在使用的linq提供程序... – 2010-12-16 20:52:10

+0

您不应该在该问题上遇到异常。尽管您试图评估该查询的结果。 – Vishal 2010-12-16 20:53:09

+0

使用Northwind数据库和LINQPad,我运行这个:'Categories.Where(c => c.CategoryName ==“XXXX”)。ToList()。Dump();'它工作正常,返回一个空的列表。 – 2010-12-16 20:54:21

回答

4

我怀疑当没有匹配时你不会遇到问题 - 我怀疑你在数据库中有一行没有Name值时得到它。要么,要么你正在做别的事情,你没有告诉我们。堆栈跟踪的样子是什么?

+0

异常详细信息:System.ArgumentNullException:值不能为空。 参数名:文字 源错误:69 线:公开名单 SearchCountriesByName(字符串searchKey) 第70行:{ 线71:返回_dc.Geo_Countries.Where(C => c.Name = NULL &&℃。 Name.Contains(searchKey))ToList(); 线72:} 73 线: System.Linq.Enumerable.ToList(IEnumerable'1源)58 OD.Domain.Repositories.GeoRepository.SearchCountriesByName(字符串searchKey)在F:\ OD \ OD.Domain \ Repositories \ GeoRepository.cs:71 – Doozie 2010-12-16 21:20:04

+0

@Doozie:searchKey'为空吗? – 2010-12-16 21:56:06

2

尝试使用上的IQueryable此代码

dataContext.Geo_Countries.Where(c => c.Name != null && c.Name.Contains(searchKey)).ToList(); 
+0

这没有帮助。我在桌上只有两个记录,这些国家是“美国”和“加拿大”,我的searchKey是“li”。没有空白或空格等的记录等。 – Doozie 2010-12-16 21:18:33

+0

可能是dataContext或Geo_Countries为空。你可以在调试模式下检查它吗? – 2010-12-16 21:22:51

0

调用ToList()将抛出一个异常,如果代码不正确执行。在下面的例子中,ToList()将抛出一个异常,如果c.Name为null:

void Main() 
{ 
    var countries = new [] { new Country() }.AsQueryable(); 
    countries.Where(c => c.Name.Contains("bubba")).ToList(); 
} 


class Country{ 
    public string Name { get; set; } 
}