Я пытаюсь отфильтровать несколько атрибутов из базы данных. Я фильтрую с 3 атрибутами. Который может быть пустым или ключом в любой комбинации. Я попробовал этот код, он работает нормально, когда я фильтруется в три этапа,if-else spipping стратегия поиска в запросе LINQ
IEnumerable<Employee> ItemsList = _db.Employees.AsEnumerable().Where(e => e.Role == 2).OrderByDescending(e => e.EmployeeID);
if (!String.IsNullOrEmpty(SearchKeyByName))
{
ItemsList = ItemsList.Where(e => e.FirstName.ToLower().StartsWith(SearchKeyByName.Trim().ToLower()) || e.LastName.ToLower().StartsWith(SearchKeyByName.Trim().ToLower()) || (e.FirstName + " " + e.LastName).ToLower().StartsWith(SearchKeyByName.Trim().ToLower()));
ViewBag.Search_FullName = SearchKeyByName;
}
if (!String.IsNullOrEmpty(SearchKeyByDepartment))
{
ItemsList = ItemsList.Where(e => e.Department.DepartmentTitle.ToLower().StartsWith(SearchKeyByDepartment.Trim().ToLower()));
ViewBag.Search_Department = SearchKeyByDepartment;
}
if (!String.IsNullOrEmpty(SearchKeyByDesignation))
{
ItemsList = ItemsList.Where(e => e.Designation.ToLower().StartsWith(SearchKeyByDesignation.Trim().ToLower()));
ViewBag.Search_Designation = SearchKeyByDesignation;
}
Но я хочу, чтобы свести к минимуму это 3, если состояние с помощью LINQ, я попытался 1 этого с помощью этого кода
IEnumerable<Employee> ItemsList2 = (from e in _db.Employees.AsEnumerable()
where e.Role == 2
where (!String.IsNullOrEmpty(SearchKeyByName) && (e.FirstName.Trim().ToLower().StartsWith(SearchKeyByName.Trim().ToLower()) || e.LastName.ToLower().StartsWith(SearchKeyByName.Trim().ToLower()) || (e.FirstName + " " + e.LastName).ToLower().StartsWith(SearchKeyByName.Trim().ToLower())))
select e).OrderByDescending(e => e.EmployeeID);
Но результат фильтрации пуст/пуст. 1-й работает хорошо. Упомяните, что ключ поиска может быть пустым, тогда ему нужно заглянуть во все значения, но когда будет предоставлен ключ, тогда потребуются только ключевые выводы.
Спасибо - [@ Джейкоб] (http://stackoverflow.com/users/119549/jacob). он работает нормально, но как насчет следующих 2 фильтров? как я могу их фильтровать? –
Используйте 'string.IsNullOrEmpty (loweredSearch)' вместо 'loweredSearch == string.Empty' может быть хорошим решением, потому что это может быть пустая строка. – gdmanandamohon
@ShoumenAgdm, вы просто добавите их в цепочку '||'. – Jacob