Convierta la expresión de Linq "obj => obj.Prop" en "parent => parent.obj.Prop"

Tengo una expresión de tipo existenteExpression<Func<T, object>>; contiene valores comocust => cust.Name.

También tengo una clase para padres con un campo de tipoT. Necesito un método que acepte lo anterior como parámetro y genere una nueva expresión que tome la clase padre (TModel) como parámetro. Esto se usará como un parámetro de expresión de un método MVC.

Así,cust => cust.Name se convierteparent => parent.Customer.Name.

Igualmente,cust => cust.Address.State se convierteparent => parent.Customer.Address.State.

Aquí está mi versión inicial:

    //note: the FieldDefinition object contains the first expression
    //described above, plus the MemberInfo object for the property/field
    //in question
    public Expression<Func<TModel, object>> ExpressionFromField<TModel>(FieldDefinition<T> field)
        where TModel: BaseModel<T>
    {
        var param = Expression.Parameter(typeof(TModel), "t");

        //Note in the next line "nameof(SelectedItem)". This is a reference
        //to the property in TModel that contains the instance from which
        //to retrieve the value. It is unqualified because this method
        //resides within TModel.
        var body = Expression.PropertyOrField(param, nameof(SelectedItem));
        var member = Expression.MakeMemberAccess(body, field.Member);
        return Expression.Lambda<Func<TModel, object>>(member, param);
    }

El error que estoy recibiendo actualmente es cuando tengo un campo con varias partes (es decir,cust.Address.State en lugar de solocust.Name) Me sale un error en elvar member línea de que el miembro especificado no existe, lo cual es cierto, ya que el cuerpo se refiere al hijo del padre (Customer) y no el elemento que contiene el miembro (Address)

Esto es lo que desearía poder hacer:

    public Expression<Func<TModel, object>> ExpressionFromField<TModel>(FieldDefinition<T> field)
        where TModel: BaseModel<T>
    {
        var param = Expression.Parameter(typeof(TModel), "t");
        var body = Expression.PropertyOrField(param, nameof(SelectedItem));
        var IWantThis = Expression.ApplyExpressionToField(field.Expression, body);
        return Expression.Lambda<Func<TModel, object>>(IWantThis, param);
    }

Cualquier ayuda para llegar a este punto sería muy apreciada.

Editar: Esto fue marcado como un posible duplicado deesta pregunta; Sin embargo, la única similitud real es la solución (que es, de hecho, la misma). La composición de expresiones no es una solución intuitiva para acceder a propiedades anidadas a través de expresiones (a menos que la propia inducción esté guiada por cierta experiencia, que no se debe suponer) También edité la pregunta para tener en cuenta que la solución debe ser adecuada para un parámetro de un método MVC, que limita las posibles soluciones.

Respuestas a la pregunta(1)

Su respuesta a la pregunta