2011-12-15 41 views
21

ListCollectionView var. Filtrelenmiş öğeleri listeden almak için (ör. Bir dosyaya yazmak), bunu yapmanın temiz bir yolu var mı?Bir koleksiyondan filtre uygulanmış bir CollectionView

Benim şimdiki çözüm ben originalCollection ve view.Filter üzerinde boş değerlere için kontrol edebilirim kodunda

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

olduğunu.

Bunu yapmanın daha temiz bir yolu var mı?

+0

'var filteredItems = originalCollection.FindAll (view.Filter):

Ayrıca Cast uzantısı yöntemi kullanabilir –

cevap

36

GetEnumerator yöntem dikkate filtreyi sürdüğünden ödemeyi sadece foreach görünümde yapabilirsiniz:

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

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

(orijinal koleksiyonunda nesneleri varsayarak tip Foo vardır). 'Da çalışır;

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