gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:44 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com