2011-05-26 11 views
11

ninguna de ellas parece hacer el truco:¿Cómo escribo una consulta linq contra un ListCollectionView?

var source = myViewModel.MyListCollectionView.Select(x => x as MyType); 
var source = myViewModel.MyListCollectionView.Select<object, MyType>(x => x as MyType); 
var source = myViewModel.MyListCollectionView.SourceCollection.Select<object, MyType>(x => x as MyType); 

Respuesta

26

ListCollectionView sólo se implementa la interfaz genérica no IEnumerable. Me sospecho desea:

var source = myViewModel.MyListCollectionView.Cast<MyType>(); 

o (si algunos valores no serán de MyType, y eso está bien):

var source = myViewModel.MyListCollectionView.OfType<MyType>(); 
+3

Nota secundaria: OfType también eliminará elementos nulos. –

7
var source = myViewModel.MyListCollectionView.OfType<MyType>(); 
2

La propiedad InternalList es de tipo IList por lo que sería capaz de escribir una consulta linq en contra de eso.

+0

en realidad var source = myViewModel.MyListCollectionView.InternalList.Select (x => x.MyProperty); no funciona – Tion

+0

Este es el IList no genérico, por lo que aún tendría que usar Cast <>. Sin mencionar que esta es una propiedad protegida y no podrías acceder a ella a menos que extendieras ListCollectionView – Tion

1

ahhhh lo encontró. tienes que usar Cast <> ¡primero!

var source = myViewModel.MyListCollectionView.Cast<MyType>().Select(p=>p.MyProperty);