是否可以使用运算符 LIKE 过滤ObservableCollection,就像在SQL 2014中一样。
Ex SQL:SELECT * FROM Customer WHERE Name LIKE 'Cal%'
我需要相同类型的过滤,但是使用ObservableCollection,我知道你有Linq库中的Where,但它只查找一个EXACT字符串
由于
答案 0 :(得分:1)
为什么你说你不能使用Where over IObservableCollection?
据我所知,你可以使用Where(和其他LINQ方法):
customers.Where(x=>x.StartsWith("Cal"));
会返回一个列表
如果需要备份另一个可观察集合,则必须使用以前的结果重建一个新集合:
var c = customers.Where(x=>x.StartsWith("Cal"));
customers = new ObservableCollection<Customer>(c.ToList());
根据您的需要,您还可以使用CollectionViewSource的“过滤器”属性,请参阅Filtering an ObservableCollection?,了解如何使用它。
答案 1 :(得分:1)
或者您可以使用CollectionView。
IList<Employer> employers;
ICollectionView _employerView;
private string _filterString=string.Empty;
public Window1()
{
InitializeComponent();
employers = GetCustomers();
_employerView = CollectionViewSource.GetDefaultView(employers);
_employerView.Filter = EmployerFilter;
this.Loaded += new RoutedEventHandler(Window1_Loaded);
}
public bool EmployerFilter(object item)
{
Employer employer = item as Employer;
return employer.Name.ToLower().StartsWith(_filterString.ToLower());
}
public string FilterString
{
get { return _filterString; }
set{
_filterString = value;
OnPropertyChanged("FilterString");
_employerView.Refresh();
} }
答案 2 :(得分:0)
只有当您告诉它与.Where(x=>x.Equals("Cal"))
完全匹配时,才匹配完全匹配,您可以通过切换到StartsWith来执行与SQL示例相同的操作。 .Where(x=>x.StartsWith("Cal"))
。