使用 Count 时出现空引用异常
本文关键字:引用 异常 Count 使用 | 更新日期: 2023-09-27 18:32:46
我有一种方法可以获取项目计数,但遇到了一个愚蠢的异常:
internal static bool IsCompanyInList(int companyId, int favoritecompanyId)
{
var result = _context.FavouriteCompanies.Count(c => c.CompanyId == companyId && c.FavouriteCompanyId == favoritecompanyId); // getting exception here
if ( result >0)
return true;
return false;
}
另外,还有一个线索,我的桌子是空的.根本没有行。如何处理这种情况。我也尝试过 Where 子句。见下文:
var result = _context.FavouriteCompanies.Where(criteria_here);
收藏夹公司为空。你可以做这样的事情:
internal static bool IsCompanyInList(int companyId, int favoritecompanyId)
{
var result = _context.FavouriteCompanies;
if (result!=null)
{
return result.Any(c => c.CompanyId == companyId && c.FavouriteCompanyId == favoritecompanyId);
}
return false;
}
在该解决方案中,if (result>0)
是多余的。
好吧,如果您可以包含堆栈,这将有所帮助,但我认为 FavoriteCompanies 集合中有一个 null(或者_context变量可能是 null - 如果您将许多方法与"."链接在一起,你会得到一个火车残骸,很难分辨什么是空的)。您可以通过删除空值来防御性地解决这个问题:
var result = _context.FavouriteCompanies.Where( c => c != null ).Count(...)
尽管说实话,最好找出将空值插入到收藏夹公司的位置并将其停止在那里。
错误可能出现在您尝试访问成员的任何位置。
var result = _context.FavouriteCompanies.Count(c => c.CompanyId == companyId && c.FavouriteCompanyId == favoritecompanyId);
_context为空吗?是_context。收藏夹公司无效?收藏夹公司是否包含公司 ID 或收藏夹公司 ID 为空的记录?
由于这是 Linq2Sql,因此在访问成员本身之前,您可以在 count 子句中询问 c.FavoriteCompanyId.Isnull()。
对我来说
,字符串(或可为空的列)值之一为空。
var result = _context.FavouriteCompanies.Count(c => c.CompanyId != null && c.CompanyId == companyId && c.FavouriteCompanyId != null && c.FavouriteCompanyId == favoritecompanyId);