Solución:
No deberías usar ForEach
de ese modo. Lea “foreach” de Lippert frente a “ForEach”
Si quieres ser cruel contigo mismo (y con el mundo), al menos no crees inútiles List
employees.All(p => {
collection.AddRange(p.Departments);
p.Departments.All(u => { u.SomeProperty = null; return true; } );
return true;
});
Tenga en cuenta que el resultado de la All
la expresión es una bool
valor que estamos descartando (lo estamos usando solo porque “cicla” todos los elementos)
Repetiré. No deberías usar ForEach
para cambiar objetos. LINQ debe usarse de una manera “funcional” (puede crear nuevos objetos pero no puede cambiar objetos antiguos ni puede crear efectos secundarios). Y lo que estás escribiendo está creando tantos inútiles List
solo para obtener dos líneas de código …
Como dijo xanatos, este es un mal uso de ForEach.
Si va a usar linq para manejar esto, lo haría así:
var departments = employees.SelectMany(x => x.Departments);
foreach (var item in departments)
{
item.SomeProperty = null;
}
collection.AddRange(departments);
Sin embargo, el enfoque de bucle es más legible y, por lo tanto, más fácil de mantener.
employees.ToList().ForEach(
emp=>
{
collection.AddRange(emp.Departments);
emp.Departments.ToList().ForEach(u=>u.SomeProperty = null);
});