Tôi có một ObservableCollection của khoảng 1000 đối tượng cần được lọc (tìm kiếm) bởi người dùng cuối. Người dùng phải có khả năng tìm kiếm theo tên hoặc id của nhân viên. Danh sách kiểm soát tiêu thụ FilteredEmployees và nhân viên được tải lên với tất cả mọi thứ trên tải trang.Lọc một ObservableCollection bằng đầu vào của người dùng
Tôi hiện đã thiết lập nó như vậy:
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);
}
}
vệ sinh được xử lý trước khi phương pháp này.
Điều này không có mùi rất hiệu quả. Tôi có nên sử dụng hai phương pháp cho việc này hay không, có cách nào tốt hơn để xử lý lọc không?
Tôi muốn giữ Nhân viên ở trạng thái không thay đổi để tôi có thể khôi phục lại FilteredEmployees vào danh sách đầy đủ mà không cần nhấn lại vào DB.
Kiểm soát danh sách của bạn là loại gì? Nó sẽ được gọn gàng nếu nó có thể tiêu thụ các nhân viên lọc trực tiếp thay vì sao chép chúng, nhưng chỉ với 1000 nó có lẽ không quan trọng cả. –
Chỉ cần một ListBox cũ thường xuyên ràng buộc trên FilteredEmployees – Slipfish