tengo una ObservableCollection de alrededor de 1.000 objetos que necesita ser filtrada (buscado) por el usuario final. El usuario debe poder buscar por nombre o identificación de empleado. El Control de lista consume Empleados y empleados filtrados está cargado con todo en la carga de la página.Filtrado de una ObservableCollection por la entrada del usuario
actualmente lo tengo configurado como tal:
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);
}
}
Saneamiento se maneja antes de este método.
Esto no huele muy eficiente. ¿Debo usar dos métodos para esto, o hay una mejor manera de manejar el filtrado?
me gustaría mantener a los empleados en un estado sin cambios para que pueda repoblar FilteredEmployees a la lista completa sin chocar con la base de datos de nuevo.
¿Qué tipo de control es su lista? Sería claro si pudiera consumir directamente a los empleados filtrados en lugar de copiarlos, pero con solo 1000 probablemente no importe en absoluto. –
Simplemente un antiguo enlace ListBox normal en los empleados filtrados – Slipfish