2010-03-24 2 views
5

Ich weiß, ich sollte IDs nicht mit dem gleichen Wert haben. Dies ist nur fiktiv, also übersehen Sie das.Wie kann ich eine Liste von Objekten mit Lambda-Ausdruck filtern?

ich habe:

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" }); 

Ich möchte Lambda Expression verwenden, um alle Autos abzurufen, die eine ID von 1.

Erwarteter Ergebnis haben:

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

Das Problem mehr Filterung eine Objektliste basierend auf einem Fremdschlüssel.

Antwort

15

Verwenden LINQ:

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

List<T>.FindAll Verwendung:

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

Ich persönlich würde die LINQ Ansatz bevorzugen - beachten Sie, dass das faul ist, während FindAll sofort Durchsucht die ganze Liste und erstellt eine neue Liste mit t er ergibt sich.

+0

Ich bin nicht einverstanden mit der LINQ-Präferenz, müssen Sie zuerst den Kontext des Codes kennen, bevor Sie entscheiden können, ob faul initialisiert werden oder nicht .... –

+0

@Tim: Ich würde normalerweise LINQ mit einem ' ToList' call nachher, wenn ich eifrig Bewertung wollte, nur für eine Konsistenz. FindAll könnte in einigen Fällen etwas einfacher sein, obwohl das eine "Liste " als Quelle einschränkt, anstatt nur "IEnumerale " zu benötigen. –

4

Versuchen Sie, diese

var match = carList.Where(x => x.id ==1); 
Verwandte Themen