2013-03-31 25 views
0

我正在根據級聯下拉過濾員工數據。如果參數的值是'-1',則意味着'所有數據'。例如,如果departmentid = -1,那麼用戶已經在下拉列表中選擇了全部內容,類似地對於類別和角色。如何在不使用很多if條件的情況下編寫下面的linq查詢?

現在我需要使用EF linq查詢來查詢數據庫。在我的員工實體中有三個外鍵組合,以根據所選值獲取工作類別,角色和部門的名稱。

因此,如果用戶選擇了-1(所有)作爲類別和工作角色,則必須查詢僱員實體並將選定部門中的所有僱員帶回,否則應根據所選部門或類別進行過濾或角色。

我不知道如何編寫一個簡潔的linq查詢,而不使用三個或if-else語句。以下是我目前爲止的內容,但是如果我採用這種方法,則至少需要使用另外三條if語句。

任何幫助將不勝感激 - 感謝

[HttpGet] 
    public ActionResult GetEmployees(Models.Department department, Models.Category  category, Models.Role role) 
    { 
     try 
     { 
      if (department.DepId == -1) 
      { 
       using (emsCtx) 
       { 
        var allResults = (from q in emsCtx.Employees 
             select new Models.Employee 
             { 
             Id = q.Id, 
             FirstName = q.FirstName, 
             MiddleName = q.MiddleName, 
             LastName = q.Lastname, 
             DOB = q.DOB, 
             JobTitle = q.Roles.Designation, 
             JobCategory = q.Categories.Type, 
             Department = q.Departments.Name, 
             Salary = q.BasicPay 
             }).ToList(); 
        employeeData.Employees = allResults; 
       } 
      } 
      else 
      using (emsCtx) 
      { 
       var empResults = (from q in emsCtx.Employees 
            where department.DepId == q.Department 
            && role.RoleId == q.Designation 
            && category.CatId == q.Category 
            select new Models.Employee 
            { 
             Id = q.Id, 
             FirstName = q.FirstName, 
             MiddleName = q.MiddleName, 
             LastName = q.Lastname, 
             DOB = q.DOB, 
             JobTitle = q.Roles.Designation, 
             JobCategory = q.Categories.Type, 
             Department = q.Departments.Name, 
             Salary = q.BasicPay 
            }).ToList(); 
       employeeData.Employees = empResults; 
      } 
      return View(employeeData); 
     } 

回答

0

寫在你的主要LINQ表達式象下面這樣:

from q in emsCtx.Employees 
where (department.DepId == -1 ? true : (department.DepId == q.Department 
             && role.RoleId == q.Designation 
             && category.CatId == q.Category)) 
select new Models.Employee 

這將解決您的問題。

+0

Thanks..Could你請讓我知道如何編寫你的上面的查詢,如果我必須檢查RoleId或CatId = -1?這是因爲我需要檢查其他組合,如「所有部門,所有類別,所選角色」,「所有部門,所選類別,所選角色」等。請您幫忙嗎? – Ren

相關問題