jbo*_*olt 1 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));
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我读得正确,他们将返回所有电影,然后过滤流派.对于双重案例来说这很好,但是当你添加第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;
Run Code Online (Sandbox Code Playgroud)
但是当你第一次访问该页面并且仅适用于单个过滤器时,这不会返回任何内容(如果我选择了类型 - 我得到了好的结果,但是当我选择类型和评级时却没有)当我输入搜索词时我什么也没有得到回复标题.
有没有更简单的方法来完成?(在某些时候,我需要能够搜索我将要编写的项目的几十个过滤器......我还有其他关于如何在数据库中搜索条目的问题,但是这不会让我朝着正确的方向前进).
如果要在标准中包含该列,如果它不为null,请尝试以下操作:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8238 次 |
| 最近记录: |