2013-03-08 128 views
7

我已经看过关于此stackoverflow,但无法找到我正在寻找的答案,其真正简单。基本上我想知道如何检查我的IEnumerable变量是否为空,我的if语句只是嘲笑我并让变量通过。mvc 4 IEnumerable检查是否为空

这里是场景,我有一个从数据库中提取的数据列表,这个小小的过滤器函数(因此没有[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语句中的句子。变化的笑声如此强烈我发誓我可以通过我的扬声器听到它。

无论如何,如果我能得到最好的方式来做到这一点,为什么。会有饼干。

+0

的if语句应该已经拿起变量为空并且采取相应的行动,但它让它通过:( – Jay 2013-03-08 16:29:32

回答

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,所以你只需要担心是否是空的。

+0

啊这是非常合情合理的感谢!最简单的东西总是被忽视 – Jay 2013-03-08 16:28:23

+2

不客气,现在...我的饼干在哪里?;-) – StriplingWarrior 2013-03-08 16:49:11

+1

关于这个问题啊,有一个错误“Cookie无法找到” – Jay 2013-03-08 17:02:44

0

尝试对代替,如果条件:

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