Get filtered items from a CollectionView

John Oxley picture John Oxley · Dec 15, 2011 · Viewed 16.4k times · Source

I have a ListCollectionView which has had a filter applied to it. In order to get the filtered items from the list (e.g. to write to a file), is there a clean way of doing it.

My current solution is

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

In the code I do check for nulls on originalCollection and view.Filter.

Is there a cleaner way of doing this?

Answer

Thomas Levesque picture Thomas Levesque · Dec 15, 2011

The GetEnumerator method takes the filter into account, so you can just foreach over the view:

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

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

(assuming the objects in the original collection are of type Foo).

You can also use the Cast extension method:

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