using System.Linq.Expressions;
using System.Collections.Generic;
public static void Main()
Expression<Func<Foo, C>> expr = x => ((B)(x.A.B)).C;
var result = new List<string>();
Construct(expr.Body, result);
Console.WriteLine(string.Join(".", result.AsEnumerable().Reverse()));
private static void Construct(Expression expr, List<string> result)
case MemberExpression member:
result.Add(member.Member.Name);
Construct(member.Expression, result);
case UnaryExpression unary:
Construct(unary.Operand, result);
public object B { get; set; }