2013-03-08 31 views
7

これについてはstackoverflowを見てきましたが、私が探している答えが見つからない、単純です。基本的には、IEnumerable変数がnullかどうかを調べる方法を知りたいのですが、私の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は(そして、私は、それを少しについて混乱しまし文は、それがnullだったかどうかを確認するために使用されている場合)、その後、= nullを、今の両方、変数はちょうど歩き回り、行くにつれて笑います。私はデバッガを実行し、いくつかの場所にそれを置く。

私もことをチャックし、これを防ぐために、哀れな試みで

「IEnumerableを、任意の結果が得られませんでした」:私は入力私が知っている値が結果を返さない場合は、これは、デバッガが審査値があると言うことですif文の文。変数はとても笑って私は私のスピーカーを通してそれを聞くことができたと誓う。

私はこれを行うための最良の方法を得ることができれば、とにかく、なぜ。クッキーがあります。

+0

その文がnullとして変数をピックアップし、それに応じて行動しているはずですが、それはそれは合格:( – Jay

答えて

7

問題は、あなたがこれを言うときということです:

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

...あなたが元のクエリを変更していない:

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

むしろ、ここで作成した1:

 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

ああ、これは完璧な理にかなっているが許可すれば感謝!あなたの欲しいものは何ですか? – Jay

+2

私のクッキーはどこですか? – StriplingWarrior

+1

ああそれについて、「クッキーが見つかりません」というエラーがありました。 – 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; 
} 
関連する問題