2013-03-08 2 views
7

Я смотрел на stackoverflow для этого, но не могу найти ответ, который я ищу, его простое на самом деле. В основном я хочу знать, как проверить, является ли моя переменная IEnumerable нулевой, оператор if просто смеется над мной и пропускает переменные.mvc 4 IEnumerable проверка, если его null

Вот сценарий, у меня есть список данных, извлеченных из базы данных, этот маленький бит - это функция фильтра (поэтому нет [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);  
      } 

Я возился с ним немного, если заявление используется для проверки, если он был нулевым, то .any(), а затем = нуль и теперь оба, переменная просто идет, смеясь, как она идет. Я запустил отладчик и надел его на несколько точек. Когда я ввести значение, которое я не знаю, будет возвращать результаты, это то, что отладчик говорит значение обзор:

«IEnumerable не дали никаких результатов»

В жалкой попытке предотвратить это, я даже бросил, что предложение в выражении if. переменная смеялась так сильно, что клянусь, я слышал это через мои колонки.

Anyways ребята, если бы я мог получить лучший способ сделать это и почему. Будут файлы cookie.

+0

, что если заявление должно быть собиранием переменного утратившим действовать соответствующим образом, но пусть она проходит :( – Jay

ответ

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

Ahh это имеет смысл Спасибо! так много для объяснения. Простейшие вещи всегда упускаются. – Jay

+2

Добро пожаловать. Теперь ... где мой печенье? ;-) – StriplingWarrior

+1

Ага об этом произошла ошибка «Cookie не найден» – Jay

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; 
} 
Смежные вопросы