2010-03-24 6 views
5

Sé que no debería tener id's con el mismo valor. Esto es solo ficticio, así que olvídalo.¿Cómo puedo filtrar una lista de objetos utilizando la expresión lambda?

que tengo:

List<Car> carList = new List<Car>(); 
carList.Add(new Car() { id = 1, name = "Honda" }); 
carList.Add(new Car() { id = 2, name = "Toyota" }); 
carList.Add(new Car() { id = 1, name = "Nissan" }); 

Quiero usar la expresión Lambda para recuperar todos los coches que tienen un id de 1.

resultado esperado:

 
-- Id: 1, Name: Honda 
-- Id: 1, Name: Nissan 

el problema es más de filtrado una lista de objetos basada en una clave externa.

Respuesta

15

uso de LINQ:

IEnumerable<Car> matchingCars = carList.Where(car => car.id == 1); 

Usando List<T>.FindAll:

List<Car> matchingCars = carList.FindAll(car => car.id == 1); 

yo preferiría el enfoque LINQ personalmente - en cuenta que esto es perezoso, mientras que FindAll inmediatamente mira a través de toda la lista y construye una nueva lista con t él resultados.

+0

No estoy de acuerdo con la preferencia de LINQ, primero necesita saber el contexto del código antes de poder decidir si va a ser perezoso inicializado o no ... –

+0

@Tim: Yo solía usar LINQ con un ' ToList' llamada después si quería una evaluación entusiasta, solo por una coherencia. FindAll podría ser un poco más simple en algunos casos, aunque eso lo limita a tener una 'List ' como fuente en lugar de solo requerir 'IEnumerale '. –

4

Prueba este

var match = carList.Where(x => x.id ==1); 
Cuestiones relacionadas