2016-05-17 78 views
0

我無法弄清楚爲什麼我的代碼無法正常工作。當該字段爲空時,它會持續加載。此外,當字段被佔用時,第四次添加內容會複製錯誤。任何幫助?在執行空字段期間發生未處理的異常

private async Task<City> RetrieveCity(string name) 
{ 
    // Instantiate return variable 
    City city = null; 

    // Find id in ProductLines table 
    var cities = await db.Cities.Where(c => c.CityName.Equals(name)).ToListAsync(); 
    city = cities.First(); 

    return city;   
} 
+0

你是什麼意思_field_取?參數'name'? – khlr

+0

只需將Try-Catch塊添加到代碼中,並在調試模式下查看異常變量中保存的內容即可。當開發人員可以閱讀和理解InnerException屬性中包含的信息時,95%的異常都可以解決。 –

回答

2

確保cities.Count()> 0,然後嘗試從列表中的第一個元素。

private async Task<City> RetrieveCity(string name) 
{ 
// Instantiate return variable 
City city = null; 

// Find id in ProductLines table 
var cities = await db.Cities.Where(c => c.CityName.Equals(name)).ToListAsync(); 
if(cities!=null && cities.Count()>0) 
{ 
    city = cities.First(); 
} 
return city;   
} 

或者乾脆只能唯一一個使用FirstOrDefault爲您匹配條件像

private async Task<City> RetrieveCity(string name) 
{ 
    var city = await db.Cities.FirstOrDefault(c => c.CityName.Equals(name)); 
    return city;   
} 
3

正如Maciej所述,很有可能您會看到連續加載的影響,因爲引發了異常,導致未正確捕獲並導致UI停留在加載-狀態。

可能因爲查詢返回空列表而發生此錯誤。稍後您調用First(),如果cities列表爲空,則會引發該錯誤。

你可以簡化你的方法是這樣的:

private async Task<City> RetrieveCity(string name) 
{ 
    return await db.Cities.FirstOrDefaultAsync(c => c.CityName.Equals(name));   
} 
相關問題