Проблема не связана с Bind
и вложенными членами, но параметром динамически создаваемого лямбда-выражения.
Параметры связываются по экземпляру, а не по имени.Здесь
Expression<Func<Foo, object>> baz = x => x.Bar.Baz;
var param = Expression.Parameter(typeof(Foo), "x");
вы определили новый параметр, но затем пытаетесь использовать baz.Body
, который связан с его собственным параметром.
Решение состоит в том, чтобы использовать исходный параметр
Expression<Func<Foo, object>> baz = x => x.Bar.Baz;
var param = baz.Parameters[0];
или замените baz.Parameters[0]
новым параметром, используя выражение visitor.