使用 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);

使用 Count 时出现空引用异常

收藏夹公司为空。你可以做这样的事情:

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