2012-10-22 86 views
0

我使用linq搜索ObservableCollection中的产品,但它不返回任何结果,例如我有一个产品名称“stack”,但是当我搜索“s”时,它不返回任何结果:Linq ObservableCollection不返回结果

private ObservableCollection<Product> _ProductList = new ObservableCollection<Product>(); 

public ObservableCollection<Product> ProductList 
{ get { return _ProductList; } set { _ProductList = value; } } 

我有一个文本框,当用户类型,LINQ将在的ObservableCollection搜索产品名称:

private void productSearch_KeyUp(object sender, KeyEventArgs e) 
{ 
     // Search text 
     string productSearchText = productSearch.Text.Trim(); 

     // Search product, return no result 
     var search = ProductList.Where(s => s.Name.StartsWith(ProductSearchText)); 

     search.ToList().ForEach(ProductList.Add); 
} 

编辑:

我注意到这是因为信件的问题。如果产品名称为大写,我需要大写,如何查找字母大小写?

+0

可能在行var search = ProductList.Where(s => s ....你可能想要检查ProductList指向的是有数据的东西。至于区分大小写的问题,只需进行所有搜索.ToLowerCase – frenchie

+0

您正在将搜索结果添加回源。这是故意的吗? – alexm

+0

@alexm,是故意的。 – Alvin

回答

1

如果问题的情况下sensetivity您可以尝试使用此

s.Name.ToUppper().StartsWith(ProductSearchText)); 

,或者你可以试试这个,以及

s.Name.ToUppper().StartsWith(ProductSearchText, StringComparison.OrdinalIgnoreCase)); 

,你可能想用搜索的foreach这样

foreach(var item in search) 
{ 

    // get a search item and do what you want with it 

} 
1

要执行不区分大小写的搜索,请使用此方法的另一个重载:

var search = ProductList.Where(s => s.Name.StartsWith 
      (ProductSearchText,StringComparison.CurrentCultureIgnoreCase)); 
+0

谢谢你的回答。 – Alvin