我正在尝试在我的MVC应用程序中创建一个搜索栏。我有以下型号
public class Project
{
public int projectID { get; set; }
public int customerID { get; set; }
public int departmentID { get; set; }
public string projectName { get; set; }
public int employeeID { get; set; }
}
我想在索引视图中创建一个搜索栏,允许用户通过输入projectID或projectName来搜索项目列表。到目前为止,我已经在projectName上进行了搜索,但我不确定如何(或者是否可能)同时按ID或两者进行搜索。 这是我的索引视图中的搜索栏:
@using (Html.BeginForm())
{
<p>
Name : @Html.TextBox("SearchName")<br />
<input type="submit" value="Search" />
</p>
}
这是我的控制器方法
public ActionResult Index(string searchName)
{
var projects = from pr in db.projects select pr;
if (!String.IsNullOrEmpty(searchName))
{
projects = projects.Where(c => c.projectName.Contains(searchName));
}
return View(projects);
}
非常感谢任何建议或帮助!感谢
答案 0 :(得分:2)
在Where子句中使用OR运算符
您可以利用简单的OR ||
运算符来测试Where()
子句中单个查询中的一个或多个属性:
public ActionResult Index(string searchName)
{
// Current projects
var projects = db.Projects;
// Filter down if necessary
if(!String.IsNullOrEmpty(searchName))
{
projects = projects.Where(p => p.projectName.Contains(searchName) || p.projectName.Contains(searchName));
}
// Pass your list out to your view
return View(projects.ToList());
}
处理不同类型
同样,如果您有多个不同类型的属性,您可以考虑在可能的情况下解析您的术语并使用它:
if(!String.IsNullOrEmpty(searchName))
{
// Normal search term
var term = searchName;
// Attempt to parse it as an integer
var integerTerm = -1;
Int32.TryParse(searchName, out integerTerm);
// Now search for a contains with the term and an equals on the ID
projects = projects.Where(p => p.projectName.Contains(term) || p.projectId == integerTerm);
}