1011 1110
1011 1110

Reputation: 781

Trying to filter using two dropdownlists

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

Answers (1)

JotaBe
JotaBe

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

Related Questions