使用Count时空引用异常

时间:2012-04-30 10:22:07

标签: c# linq linq-to-sql count

我有一种计算物品的方法,但却被一个愚蠢的例外所困扰:

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

4 个答案:

答案 0 :(得分:1)

FavouriteCompanies为空。你可以这样做:

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)是多余的。

答案 1 :(得分:1)

如果你可以包含堆栈,那会有所帮助,但我认为FavouriteCompanies集合中有一个空(或者_context变量为null - 如果你将许多方法与“。”链接起来,你会得到一个火车残骸,很难说什么是空的)。你可以通过删除空值来解决这个问题:

var result = _context.FavouriteCompanies.Where( c => c != null ).Count(...)

虽然说实话,最好找出一个空位被插入FavourieCompanies并在那里停止的地方。

答案 2 :(得分:1)

错误可能是您尝试访问成员的任何地方。

var result = _context.FavouriteCompanies.Count(c => c.CompanyId == companyId && c.FavouriteCompanyId == favoritecompanyId);

是_context null吗? 是_context.FavoriteCompanies null? FavoriteCompanies是否包含CompanyId或FavouriteCompanyId为空的记录?

由于这是Linq2Sql,您可以在访问成员本身之前在count子句中询问c.FavouriteCompanyId.Isnull()。

答案 3 :(得分:1)

对我来说,字符串(或可空列)之一的值为null。

        var result = _context.FavouriteCompanies.Count(c => c.CompanyId != null && c.CompanyId == companyId && c.FavouriteCompanyId != null && c.FavouriteCompanyId == favoritecompanyId);