2013-03-08 10 views
7

Rozglądałem się na stackoverflow dla tego, ale nie mogę znaleźć odpowiedzi, której szukam, to jest naprawdę proste. Zasadniczo chcę wiedzieć, jak sprawdzić, czy moja zmienna IEnumerable jest null, moja instrukcja if po prostu śmiać się ze mnie i pozwala zmiennych przechodzą.mvc 4 IEnumerable sprawdzanie czy jego wartość zerowa

Oto scenariusz, mam listę danych pobranych z bazy danych, ten mały bit jest funkcją filtrującą (więc nie [HttpPost]), która filtruje zawartość na podstawie danych wprowadzanych przez użytkownika. Pierwszą rzeczą, którą sprawdza jest lista recenzji w recenzowanej bazie danych, jeśli ta zwraca pustą, chcę, aby sprawdzała listę użytkowników w bazie recenzji.

oto kod:

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

mam pomieszane o nim trochę, if służy do sprawdzania, czy to null, następnie .any(), a następnie = null, a teraz oba, zmienna po prostu przechodzi obok, śmiejąc się. Uruchomiłem debugger i umieściłem go w kilku miejscach. Kiedy wejście to wartość, która wiem nie zwróci wyniki to co debugger mówi wartość recenzja jest:

„IEnumerable nie dały żadnych rezultatów”

W żałosną próbę zapobieżenia temu nawet chucked że zdanie w instrukcji if. zmienna śmiała się tak mocno, że przysięgam, że słyszałem to przez moje głośniki.

W każdym razie, chłopaki, gdybym mógł uzyskać najlepszy sposób na zrobienie tego i dlaczego. Będą pliki cookie.

+0

że jeśli oświadczenie powinno być podniesienie zmienną jako nieważną i działając odpowiednio, ale niech to minie :( – Jay

Odpowiedz

7

Problemem jest to, że kiedy mówisz to:

  review = review.Where(s => s.user.Contains(searchString)); 

... nie jesteś modyfikowania oryginalnego zapytania:

var review = from m in _db.Reviews 
       select m;   

lecz raczej jeden utworzyć tutaj:

 review = review.Where(s => s.review.Contains(searchString)); 

Tak skutecznie mówisz:

Jeśli zapytanie nie zawiera żadnych wyników, należy dodać do niego dodatkowe kryteria.

Oczywiście nie przyniesie to żadnych wyników.

Spróbuj to zamiast:

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

Należy zauważyć, że sposób jesteś deklarowania zmiennych, to niemożliwe, żeby być null, więc trzeba tylko się martwić o to, czy są one puste.

+0

Ahh to sprawia sens Dzięki! Tyle o tym, że najprostsze rzeczy zawsze są pomijane – Jay

+2

Nie ma za co ... teraz ... gdzie jest moje ciasteczko? ;-) – StriplingWarrior

+1

Ahh o tym, Wystąpił błąd "Nie można znaleźć pliku cookie" – Jay

0

Spróbuj zamiast ze jeśli warunek:

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; 
} 
Powiązane problemy