我正在阅读 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));
}
因此,如果我没看错,他们会返回所有电影,然后过滤流派。这对于双重情况很好,但是当您添加第三个或第四个搜索条件时,您会将 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;
但是当您第一次访问该页面时不会返回任何内容,并且仅适用于单个过滤器(如果我选择流派 - 我会得到很好的结果,但当我选择流派和评级时不会)并且当我输入搜索词时我什么也没有返回为标题。
有没有更简单的方法来完成?(在某些时候,我将需要能够为我将要编写的项目搜索几十个过滤器......我还有其他关于如何搜索数据库条目的问题,但这不会让我朝着正确的方向前进)。