mvc 4 IEnumerable检查它是否为null

Jay*_*Jay 7 c# linq asp.net-mvc asp.net-mvc-4

我已经看过stackoverflow这个但是找不到我正在寻找的答案,它很简单.基本上我想知道如何检查我的IEnumerable变量是否为null,我的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);      
            }
Run Code Online (Sandbox Code Playgroud)

我已经搞砸了一下,if语句用于检查它是否为null,然后.any(),然后!= null现在两者,变量只是继续,笑着它.我运行调试器并把它放在几个点上.当我输入一个我知道不会返回结果的值时,这是调试器所说的评论值是:

"IEnumerable没有产生任何结果"

为了防止这种情况的可怜尝试,我甚至在if语句中删除了这句话.变量笑得那么难我发誓我可以通过我的扬声器听到它.

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

Str*_*ior 7

问题是,当你这样说:

         review = review.Where(s => s.user.Contains(searchString));
Run Code Online (Sandbox Code Playgroud)

...你没有修改原始查询:

 var review = from m in _db.Reviews
              select m;        
Run Code Online (Sandbox Code Playgroud)

而是,你在这里创建的那个:

        review = review.Where(s => s.review.Contains(searchString));
Run Code Online (Sandbox Code Playgroud)

你有效地说:

如果查询没有任何结果,请为其添加其他条件.

这显然不会产生任何结果.

试试这个:

    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);      
        }
Run Code Online (Sandbox Code Playgroud)

请注意,您声明变量的方式,它们是不可能的null,所以您只需要担心它们是否为空.

  • 别客气.现在......哪里是我的饼干?;-) (2认同)