Considere el requisito de cambiar un miembro de datos en una o más propiedades de un objeto que tiene 5 o 6 niveles de profundidad.Reemplazar foreach anidado con LINQ; modificar y actualizar una propiedad en el interior de
Hay subcolecciones que deben repetirse para llegar a la propiedad que necesita una modificación de inspección &.
Aquí estamos llamando a un método que limpia la dirección de la calle de un empleado. Dado que estamos cambiando los datos dentro de los bucles, la implementación actual necesita un bucle for
para evitar la excepción:
no se puede asignar a "someVariable" porque es un 'foreach variable de iteración'
Aquí es el algoritmo actual (ofuscado) con foreach
anidado y for
.
foreach (var emp in company.internalData.Emps)
{
foreach (var addr in emp.privateData.Addresses)
{
int numberAddresses = addr.Items.Length;
for (int i = 0; i < numberAddresses; i++)
{
//transform this street address via a static method
if (addr.Items[i].Type =="StreetAddress")
addr.Items[i].Text = CleanStreetAddressLine(addr.Items[i].Text);
}
}
}
Pregunta: ¿Puede este algoritmo se Reimplementado usando LINQ? El requisito es que la colección original cambie sus datos mediante esa llamada a un método estático.
Actualización: Estaba pensando/inclinándome en la dirección de una solución tipo jQuery/selector. No dije específicamente esta pregunta de esa manera. Me di cuenta de que estaba exagerando con esa idea (sin efectos secundarios). ¡Gracias a todos! Si hay una forma de realizar un selector de jQuery, ¡vamos a verlo!
gracias. la suya y respuestas de Merhdad eran funcionalmente idénticos, pero vi el suyo primero :) pensé que no tendría sentido volver a escribir ese código, pero sentí que era importante hacer la observación sobre los efectos secundarios –
LINQ no es un servidor SQL Server, aunque la implementación para SQL difiere de eso en .NET one - Aún puede cambiar las propiedades con ambos conjuntos (LINQ to SQL) y solo con C# LINQ. – ppumkin