2010-12-16 158 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; } 
}