Reputation: 781
I'm using MVC and I am trying to filter data through two dropdownlists.
I have one working, just don't know the logic to get the second one working
here is my code:
Controller:
public ActionResult Index(int? DepartmentID, int? JobTitleID)
{
DepartmentDropDownList();
JobDropDownList();
var employees = db.Employees.Include(e => e.Department).Include(e => e.JobTitle);
if (DepartmentID.HasValue || JobTitleID.HasValue)
{
employees = employees.Where(j => j.JobTitleID == JobTitleID);
//somehow filter departments here
}
return View(employees.ToList());
}
View:
@model IEnumerable<josh_MVC_Company.Models.Employee>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
<p> Select by Department: @Html.DropDownList("DepartmentID", "Departments") </p>
<p> Select by Job Title: @Html.DropDownList("JobTitleID","Job Titles") </p>
<input type="submit" value="Filter" />
}
Upvotes: 0
Views: 114
Reputation: 39004
You have to filter by both fields before materializing the LINQ query (ToList()
).
if (JobTitleID.HasValue)
{
employees = employees.Where(j => j.JobTitleID == JobTitleID.Value);
}
if (DepartmentID.HasValue)
{
employees = employees.Where(j => j.DepartmentID == DepartmentID.Value);
}
return View(employees.ToList());
In this way, if none of the values is present, it won't be filtered at all.
(As you can see you can chain as many Where(Expression<Func<T,bool>>)
as you want)
Upvotes: 1