2010-10-17 11 views
38

ich nach einem Weg suchen Sie den folgenden Code zu ändern:Multi-line foreach-Schleife in Linq/Lambda

foreach (Contact _contact in contacts) 
{ 
    _contact.ID = 0; 
    _contact.GroupID = 0; 
    _contact.CompanyID = 0; 
} 

Ich möchte diese mit LINQ/Lambda in etwas Ähnliches ändern:

contacts.ForEach(c => c.ID = 0; c.GroupID = 0; c.CompanyID = 0); 

Allerdings funktioniert das nicht. Gibt es eine Möglichkeit, mehrere Zeilen in einer Linq für jede andere als eine Funktion in einer Zeile zu tun?

Antwort

61
contacts.ForEach(c => { c.ID = 0; c.GroupID = 0; c.CompanyID = 0; }); 

Es hat nichts mit LINQ per se zu tun; Es ist nur eine einfache anonyme Methode, die in Lambda-Syntax geschrieben wurde und an die -Funktion übergeben wurde (die seit 2.0 vor LINQ existierte).

+0

Einfach, danke! – shlomoa

3

LINQ steht für Language Integrated Abfrage - das heißt, es soll für abfragt - d.h. Extrahieren oder eine Sequenz in einen neuen Satz Transformation, nicht das Original zu manipulieren.

Die ForEach method hangs off List<T> und ist eine bequeme Abkürzung zu foreach; nichts Besonderes.