У меня есть ObservableCollection около 1000 объектов, которые должен быть отфильтрован (найден) конечным пользователем. Пользователь должен иметь возможность осуществлять поиск по имени или идентификатору сотрудника. Элемент управления List использует FilteredEmployees, а сотрудники загружены всем, что загружается на странице.
У меня сейчас настроено так:
public ObservableCollection<EmployeeServicesData> Employees { get; set; }
public ObservableCollection<EmployeeServicesData> FilteredEmployees { get; set; }
internal void FilterEmployee(string searchText, bool isByName)
{
if (searchText.Length > 0)
{
IEnumerabe<EmployeeServicesData> filter;
if (isByName)
filter = Employees.Where(x => x.Name.Length >= searchText.Length).Where(x => x.Name.Substring(0, searchText.Length) == searchText.ToUpper());
else
filter = Employees.Where(x => x.EmployeeNumber.ToString().Length > searchText.Length).Where(x => x.EmployeeNumber.ToString().Substring(0, searchText.Length) == text);
foreach (EmployeeServicesData employee in filter)
FilteredEmployees.Add(employee);
}
}
Санитария обрабатывается до этого метода.
Это не пахнет очень эффективно. Должен ли я использовать два метода для этого, или есть лучший способ обработки фильтрации?
Я бы хотел сохранить Сотрудников в неизменном состоянии, чтобы я мог снова заполнить FilteredEmployees до полного списка без повторного обращения к БД.