J'ai une collection Observable d'environ 1000 objets qui doit être filtrée (recherchée) par l'utilisateur final. L'utilisateur doit pouvoir effectuer une recherche par nom ou par identifiant d'employé. Le contrôle de liste consomme FilteredEmployees et les employés sont chargés avec tout au chargement de la page.Filtrage d'une ObservableCollection par l'entrée de l'utilisateur
J'ai actuellement il mis en place en tant que tel:
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);
}
}
L'assainissement est traitée avant que cette méthode.
Cela ne sent pas très efficace. Devrais-je utiliser deux méthodes pour cela, ou existe-t-il une meilleure façon de gérer le filtrage? Je souhaite garder les employés dans un état inchangé afin que je puisse repasser FilteredEmployees à la liste complète sans frapper à nouveau la DB.
De quel type est votre liste de contrôle? Ce serait bien si elle pouvait consommer directement les employés filtrés au lieu de les copier, mais avec seulement 1000, ça n'a probablement pas d'importance du tout. –
Juste une ancienne liaison ListBox sur FilteredEmployees – Slipfish