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