2010-07-13 5 views
23

¿Hay alguna manera de encontrar en una lista todos los artículos de un cierto tipo con una expresión Linq/Lambda?Linq encontrar todo con cierto tipo

Actualización: Debido a las respuestas, me doy cuenta de que la pregunta no era lo suficientemente específica. Necesito una nueva lista con solo los artículos de un tipo específico. En mi caso, la clase no tiene ninguna subclase, por lo que no es necesario tener en cuenta la herencia.

+0

Podría indicar si o no desea hacer caso omiso de la herencia? P.ej. si quisiera todos los tipos de Objeto, ¿le gustaría simplemente los tipos de Objeto o incluir todas las subclases de Objeto? Algunas de las respuestas harán la primera, otras la segunda. –

+0

Veo, en mi caso, la clase no tiene subclases. –

Respuesta

73

Uso OfType<T> así:

foreach (var bar in MyList.OfType<Foo>()) { 
    ... 
} 
+3

El método de extensión IEnumerable OfType es la forma recomendada de microsoft de hacerlo. – devlife

29

hará esto?

list.Where(t => t is MyType); 
+2

+1 Lee mucho mejor que las otras formas – GFoley83

+0

Sí, parece más fácil de leer. +1 –

+5

Pero aún tiene que emitir el resultado; si usa OfType, el resultado también se aplica. –

0

tal vez usted podría utilizar ...

 List<object> list = new List<object>(); 
     list.Add("string"); 
     list.Add(9); 

     var allOfOneType = list.Where(i => i.GetType().Equals(typeof(string))); 
+0

Sí ... la respuesta de Dave Markles es mejor - tal vez :) – hnkz

1

Algo como esto (si se utiliza LINQ a objetos - que no funcionará con LINQ a las entidades):

var specificListOfTypes = from item in list 
          where item.GetType() == typeof(int) 
          select item; 
+2

No puede usar GetType(). Lanza el siguiente error: "LINQ to Entities no reconoce el método 'System.Type GetType()', y este método no se puede traducir a una expresión store". – spadelives

+0

bien, entonces no puedes usar GetType() en LINQ para Entidades, pero LINQ para objetos funciona –

-1

Usted puede usar el método GetType() y compararlo con el tipo especificado.

Por ejemplo, selecciono todos los valores del tipo de cadena de la lista siguiente:

var myList = new List<object>(); 

     myList.Add(5); 

     myList.Add("My life"); 

     var result = from obj in myList 
        where obj.GetType() == typeof(string) 
        select obj; 
+1

Esto arroja un error, "LINQ to Entities no reconoce el método 'System.Type GetType()', y esto método no puede traducirse en una expresión de tienda ". – spadelives

-1

sugiere emplear este var myLst = new List<object>(); var elements = myList.Where(item => item.GetType().IsInstanceOfType(typeof(MyClass)));

Cuestiones relacionadas