执行空字段时发生未处理的异常

时间:2016-05-17 08:24:18

标签: c# asp.net-mvc entity-framework

我无法弄清楚为什么我的代码无效。当该字段为空时,它只是连续加载。此外,当字段IS占用时,第四次添加内容会复制错误。有什么帮助吗?

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;           
}

3 个答案:

答案 0 :(得分:3)

正如Maciej所提到的,你很可能会看到连续加载的影响,因为抛出的异常没有被正确捕获并导致UI留在装载 -state。

可能会发生错误,因为您的查询返回一个空列表。稍后您调用First(),如果cities列表为空,则会引发该错误。

您可以像这样简化您的方法:

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

答案 1 :(得分:2)

确保cities.Count()&gt;在尝试从列表中获取第一个元素之前为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;           
}

答案 2 :(得分:1)

使用

.setDrawCircles = NO;

如果序列为空,它将返回null

更多信息:

https://msdn.microsoft.com/en-us/library/bb340482(v=vs.100).aspx

When to use .First and when to use .FirstOrDefault with LINQ?