MVC 4中如何检查IEnumerable是否为空?

7
我在stackoverflow搜索了一下,但找不到我要找的答案,其实很简单。我想知道如何检查我的IEnumerable变量是否为空,我的if语句嘲笑着让变量通过。
这是场景:我有一个从数据库中提取的数据列表,这个小函数是一个过滤器(因此没有[HttpPost]),它根据用户的输入来过滤内容。它首先检查审核数据库中的审核列表,如果返回空值,则要检查审核数据库中的用户列表。
这是代码:
   var review = from m in _db.Reviews
                     select m;        

        if (!String.IsNullOrEmpty(searchString))
        {
            review = review.Where(s => s.review.Contains(searchString));
            if (review != null && review.Any())
            {
                return View(review);      
            }
            else
            {
                review = review.Where(s => s.user.Contains(searchString));
                return View(review);      
            }

我已经稍微尝试过了,if语句用来检查其是否为空,然后使用.any()、!= null以及两者结合,可变量仍然继续向前走,好像在嘲笑着我。我运行了调试器并放在几个位置上。当我输入一个我知道不会返回结果的值时,调试器显示审阅价值是:

"IEnumerable没有生成任何结果"

为了防止这种情况发生,我甚至在if语句中加入了那句话。可变量笑得太厉害了,我发誓我可以通过扬声器听到它。

无论如何,如果我能得到最好的方法以及原因,就会有饼干。


if语句应该将变量识别为空并相应地进行操作,但它却让其通过了 :( - Jay
2个回答

7
问题在于当你说:
         review = review.Where(s => s.user.Contains(searchString));

你没有修改原始查询:

 var review = from m in _db.Reviews
              select m;        

但是,你要创建的是这个:
        review = review.Where(s => s.review.Contains(searchString));

实际上你的意思是:

如果查询没有结果,则添加其他条件。

这显然也不会产生任何结果。

请尝试这个方法:

    if (!String.IsNullOrEmpty(searchString))
    {
        var reviewMatches = _db.Reviews.Where(s => s.review.Contains(searchString));
        if (reviewMatches.Any())
        {
            return View(reviewMatches);      
        }
        else
        {
            var userMatches = _db.Reviews.Where(s => s.user.Contains(searchString));
            return View(userMatches);      
        }

请注意,您声明变量的方式使它们无法为null,因此您只需要担心它们是否为空。

啊,这很有道理!非常感谢您的解释。最简单的事情总是被忽视了。 - Jay

0

使用if条件语句尝试这个:

var review = from m in _db.Reviews
             select m;        

if (!String.IsNullOrEmpty(searchString))
{
  review = review.Where(s => s.review.Contains(searchString));
  if (review.count() != 0 && review.Any())
  {
    return View(review);
  }
  else
  {
    review = review.Where(s => s.user.Contains(searchString));
    return View(review);
  }
  return null;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接