Search code examples
c#.netwpfcollectionview

Get filtered items from a CollectionView


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?


Solution

  • 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>();