Получить отфильтрованные элементы из CollectionView - PullRequest
27 голосов
/ 15 декабря 2011

У меня есть ListCollectionView, к которому применен фильтр. Чтобы получить отфильтрованные элементы из списка (например, для записи в файл), существует ли чистый способ сделать это.

Мое текущее решение -

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

В коде я проверяю наличие нулей на originalCollection и view.Filter.

Есть ли более чистый способ сделать это?

1 Ответ

43 голосов
/ 15 декабря 2011

Метод GetEnumerator учитывает фильтр, поэтому вы можете просто foreach просмотреть:

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

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

(при условии, что объекты в исходной коллекции имеют тип Foo).

Вы также можете использовать метод расширения Cast:

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