Eh bien, non seulement vous auriez à parcourir l'arbre d'expression : vous auriez également à convertir la propriété finale "getter" que vous rencontrez en un "setter" de propriété. Fondamentalement, vous voudriez trouver l'expression qui agit comme la "cible" du getter (c'est-à-dire l'objet dont il va obtenir la propriété), l'évaluer pour obtenir la cible, puis trouver le setter correspondant pour la propriété finale, et l'appeler avec la cible et la nouvelle valeur.
Notez que en ne nécessitant que l'arbre d'expression pour représenter le "getter", vous perdez une partie de la sécurité à la compilation à laquelle vous pourriez vous attendre... parce qu'un appelant pourrait passer une propriété en lecture seule :
SetValue(c => c.Account.Name.Length, 0); // string.Length est en lecture seule
Une autre alternative serait de modifier votre code pour que l'expression lambda représente le setter au lieu du getter :
SetValue((c, value) => c.Account.Name = value, "Test");
Alors vous n'auriez même pas besoin d'un arbre d'expression - vous pourriez utiliser un simple délégué, et l'exécuter de manière appropriée.
Malheureusement, vous ne nous avez pas vraiment donné suffisamment d'informations sur ce que vous essayez de réaliser pour savoir si c'est une suggestion réalisable.