Observable Collection中是否有任何运算符“LIKE”用于过滤

时间:2014-10-06 13:12:52

标签: c# wpf linq observablecollection sql-server-2014

是否可以使用运算符 LIKE 过滤ObservableCollection,就像在SQL 2014中一样。

Ex SQL:SELECT * FROM Customer WHERE Name LIKE 'Cal%'

我需要相同类型的过滤,但是使用ObservableCollection,我知道你有Linq库中的Where,但它只查找一个EXACT字符串

由于

3 个答案:

答案 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"))