MVC 4 IEnumerable проверка, если его ноль

Я посмотрел на stackru для этого, но не могу найти ответ, который я ищу, это действительно просто. По сути, я хочу знать, как проверить, является ли моя переменная 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. переменная смеялась так сильно, что я клянусь, что слышал это через мои динамики.

В любом случае, ребята, если бы я мог найти лучший способ сделать это, и почему. Там будут куки.

2 ответа

Решение

Проблема в том, что когда вы говорите это:

         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так что вам остается только беспокоиться о том, пусты ли они.

Попробуйте это вместо условия 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;
}
Другие вопросы по тегам