2011-12-15 75 views
21

我有一个ListCollectionView已应用过滤器。为了从列表中获得已过滤的项目(例如,写入文件),是否有干净的方式来完成它。从一个CollectionView获取过滤项目

我目前的解决方案是

var filteredItems = originalCollection.Where(i => view.Filter(i)); 

在代码我检查空值上originalCollectionview.Filter

是否有这样做的更清洁的方式?

+0

`VAR filteredItems = originalCollection.FindAll(view.Filter);`也适用 – 2011-12-15 11:09:06

回答

36

GetEnumerator该方法采用滤波器考虑进去,这样可以只是foreach在视图:

ICollectionView view = ... 
view.Filter = ... 

foreach(Foo o in view) 
{ 
    ... 
} 

(假设原始集合中的对象的类型是Foo的)。

您还可以使用Cast扩展方法:

var filteredItems = view.Cast<Foo>();