Ich habe eine ObservableCollection von ungefähr 1000 Objekten, die vom Endbenutzer gefiltert (gesucht) werden müssen. Der Benutzer muss in der Lage sein, nach Name oder Mitarbeiter-ID zu suchen. Das Listensteuerelement verbraucht FilteredEmployees und Employees wird beim Laden der Seite mit allem geladen.Filtern einer ObservableCollection durch Benutzereingabe
Ich habe es zur Zeit als solche eingerichtet:
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);
}
}
Sanitation vor dieser Methode behandelt wird.
Dies riecht nicht sehr effizient. Sollte ich zwei Methoden dafür verwenden, oder gibt es eine bessere Möglichkeit, mit Filtern umzugehen?
Ich möchte Mitarbeiter in einem unveränderten Zustand halten, damit ich FilteredEmployees in die vollständige Liste neu füllen kann, ohne die DB erneut zu treffen.
Welche ist Ihre List Control? Es wäre nett, wenn es die gefilterten Mitarbeiter direkt konsumieren könnte, anstatt sie zu kopieren, aber mit nur 1000 ist es wahrscheinlich überhaupt nicht wichtig. –
Nur eine reguläre alte ListBox-Bindung für FilteredEmployees – Slipfish