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