次のコードは、チュートリアルから取得したものです。 ASP.net MVC 3 を使用して映画データベースを管理する方法。
チュートリアルでは、データベースに存在するすべての映画ジャンルを含むコントローラー クラスにリスト オブジェクトが追加されます。このリストはビューのドロップダウンに渡され、データベースをジャンル別に検索できるようになります。
コントローラー: (映画のジャンルに関連する太字のコード)
public ActionResult SearchIndex(string movieGenre, string searchString)
{
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
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));
}
}
私がやりたいのは、これをさらに拡張して、ジャンルだけでなく価格でも映画を検索できるようにすることです。これを行うために、同じコードの多くを再利用できることを知っています。コントローラ クラスがジャンルまたは価格のいずれかを渡すことができる新しいクラスを作成する必要があると思います。これは正しいです?もしそうなら、私は例をいただければ幸いです。ありがとう。
更新/説明:
以下のように、ジャンルと価格の両方のコードを繰り返さないようにしたい:
public ActionResult SearchIndex(string movieGenre, string searchString,float moviePrice)
{
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
var PriceLst = new List<string>();
var PriceQry = from d in db.Movies
orderby d.Genre
select d.Genre;
PriceLst.AddRange(GenreQry.Distinct());
ViewBag.moviePrice = new SelectList(PriceLst);
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));
}
if (string.IsNullOrEmpty(moviePrice))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == moviePrice));
}
}