私は MvcMovie チュートリアルを行っていましたが、MoviesController の SearchIndex() 呼び出しを変更して、複数の基準で検索しようとしていました。このチュートリアルでは、次のコードを使用してタイトルとジャンルで検索する方法を示します。
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
if (string.IsNullOrEmpty(movieGenre))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == movieGenre));
}
したがって、この権利を読むと、すべての映画が返され、ジャンルでフィルター処理されます。デュアル ケースでは問題ありませんが、3 番目または 4 番目の検索条件を追加すると、if ステートメントの呼び出しの量が 2 倍 (n に対して) - 1 ケース増加します。たとえば、検索する列が 10 個ほどある場合、これは非常に手に負えなくなります。
私は次のようなもう少し単純なものを使用しようとしました:
var movieQry = from m in db.Movies
where ((m.Title !=null && m.Title == searchString) ||
(m.Rating != null && m.Rating == movieRating) ||
(m.Genre != null && m.Genre == movieGenre))
select m;
しかし、最初にページにアクセスしたときは何も返されず、単一のフィルターでのみ機能します (ジャンルを選択した場合-良い結果が得られますが、ジャンルと評価を選択した場合はそうではありません)、検索語を入力しても何も返されませんタイトル用。
達成するためのより簡単な方法はありますか?(ある時点で、私が書いているプロジェクトのために何十ものフィルターを検索できるようにする必要があります...そして、データベースでエントリを検索する方法について他の質問がありますが、そうではないため、正しい方向に進むことができます)。