Remplacement de foreach imbriqué avec LINQ; modifier et mettre à jour une propriété au plus profond de

Prendre en considération le besoin de changement un membre de données sur une ou plusieurs propriétés d'un objet qui est de 5 ou 6 niveaux de profondeur.

Il y a des sous-collections qui doivent être répétées pour arriver à la propriété qui doit inspection & modification.

Ici nous sommes à l'appel d'une méthode qui nettoie l'adresse d'un Employé. Depuis que nous sommes en train de changer les données à l'intérieur de la boucle, la mise en œuvre actuelle a besoin d'un for de la boucle pour éviter que l'exception:

Ne peut pas attribuer à "someVariable" parce que c'est un "foreach variable d'itération'

Voici l'algorithme actuel (crypté) avec imbriqué foreach et un 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);
        }
    }
}

Question:
Cet algorithme peut être réimplémentée à l'aide de LINQ? L'exigence est pour l'original de la collecte de ses données modifiées par la méthode statique appel.

Mise à jour: je pensais/se penchant dans la direction d'un jQuery/sélecteur de type de solution. Je n'ai pas spécialement mot à cette question de cette façon. Je me rends compte que j'étais plus portée sur cette idée (sans effets secondaires). Merci à tout le monde! Si il ya une telle façon d'effectuer un jQuery-comme sélecteur, veuillez nous allons voir ça!

source d'informationauteur p.campbell