7

これについてstackoverflowを調べましたが、探している答えが見つかりません。本当に簡単です。基本的に、IEnumerable 変数が null かどうかを確認する方法を知りたいのですが、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 ステートメントは、それがnullであるかどうかをチェックするために使用され、次に.any()、次に!= null、そして今では両方とも、変数は通り過ぎて笑いながら通り過ぎます。デバッガーを実行し、いくつかの場所に配置しました。結果が返されないことがわかっている値を入力すると、デバッガーはレビュー値を次のように表示します。

「IEnumerable では結果が得られませんでした」

これを防ぐための哀れな試みで、私はその文を if ステートメントに入れさえしました。変数はとても笑いました。スピーカーから聞こえることを誓います。

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

4

2 に答える 2

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が空であるかどうかだけを気にする必要があることに注意してください。

于 2013-03-08T16:18:38.347 に答える
0

代わりに 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;
}
于 2013-10-19T11:50:44.060 に答える