database - ASP.NET MVC 4 MvcMovie 教程 按多个搜索条件过滤查询

标签 database asp.net-mvc-4

我正在阅读 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;

但是当您第一次访问该页面时,它不会返回任何内容,并且仅适用于单个过滤器(如果我选择流派 - 我会得到很好的结果,但当我选择流派和评级时则不会)并且我在输入时什么也得不到返回标题的搜索词。

有没有更简单的方法来完成? (在某些时候,我将需要能够为我将要编写的项目搜索数十个过滤器......我还有其他关于如何搜索数据库条目的问题,但这不会让我朝着正确的方向前进).

最佳答案

如果你想在条件中包含该列(如果它不为空),请尝试以下操作:

  string Title = Request.QueryString["Title"];
  string Rating= Request.QueryString["Rating"];
  string Genre = Request.QueryString["Genre"];

   var movieQry = from m in db.Movies
                    where ((string.IsNullOrEmpty(Title) ? true : m.Title == Title ) &&
                           (string.IsNullOrEmpty(Rating) ? true : m.Rating == Rating ) &&
                           (string.IsNullOrEmpty(Genre)  ? true : m.Genre == Genre ))
                    select m;

关于database - ASP.NET MVC 4 MvcMovie 教程 按多个搜索条件过滤查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785065/

相关文章:

c# - MVC4 和 jquery : Redirecting to another view using button and also sending parameter object (to another view)

mysql - 有效地按类别进行组织

asp.net-mvc - 当用户空闲时间为 5 分钟时,如何在 MVC4 中自动注销?

c# - MVC 嵌入式 View

mysql - 类型错误 : Cannot set property 'decoder' of undefined

c# - 为一种方法覆盖 MVC 中的全局过滤器

c# - 使用 jQuery 将表单数据发布到 MVC4 Controller 操作方法时出现问题

database - 对所有数据库使用单个查询

html - 我应该用数据库中的是/否选项填充下拉列表还是直接使用 HTML 来填充?

html - 将 html 功能添加到 utl_smtp 未显示在 gmail 中,但在另存为 .html 文件并在浏览器中打开时显示