我有一個需要由最終用戶過濾(搜索)的大約1000個對象的ObservableCollection。用戶必須能夠按名稱或員工ID進行搜索。列表控件使用FilteredEmployees,員工在頁面加載時加載所有內容。通過用戶輸入過濾ObservableCollection
目前,我有它設置爲這樣:
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重新填充到完整列表中,而無需再次敲擊數據庫。
什麼類型是您的列表控件?如果它可以直接消費過濾員工而不是複製他們,那將是很整潔的,但只有1000人可能根本就不重要。 – 2009-09-22 15:49:22
只是FilteredEmployees上的常規舊ListBox綁定 – Slipfish 2009-09-22 15:57:55