2010-10-17 12 views
38

Busco una manera de cambiar el siguiente código:multilínea bucle foreach en LINQ/lambda

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

quisiera cambiar esto usando LINQ/lambda en algo similar a:

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

Sin embargo, eso no funciona. ¿Hay alguna manera de hacer multi-línea en un linq foreach que no sea escribiendo una función para hacer esto en una línea?

Respuesta

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

No tiene nada que ver con LINQ per se; es simplemente un método anónimo simple escrito en sintaxis lambda pasado a la función (que existía desde 2.0, antes de LINQ).

+0

Simple, gracias! – shlomoa

3

LINQ representa Language Integrated consulta - lo que significa que está destinada a consultar - es decir, la extracción o la transformación de una secuencia en un nuevo conjunto, no la manipulación de la original.

El ForEach method hangs off List<T> y es un atajo de conveniencia para foreach; nada especial.