¿Cómo puedo transformar esta expresión linq?

Digamos que tengo una entidad que quiero consultar con clasificación aplicada:

public class Person: Entity
{
    public int Id { get; protected set; }
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
}

En mi consulta tengo lo siguiente:

Expression<Func<Person, object>> orderBy = x => x.Name;

var dbContext = new MyDbContext();

var keyword = "term";
var startsWithResults = dbContext.People
    .Where(x => x.Name.StartsWith(keyword))
    .Select(x => new {
        Rank = 1,
        Entity = x,
    });
var containsResults = dbContext.People
    .Where(x => !startsWithResults.Select(y => y.Entity.Id).Contains(x.Id))
    .Where(x => x.Name.Contains(keyword))
    .Select(x => new {
        Rank = 2,
        Entity = x,
    });

var rankedResults = startsWithResults.Concat(containsResults)
    .OrderBy(x => x.Rank);

// TODO: apply thenby ordering here based on the orderBy expression above

dbContext.Dispose();

He intentado ordenar los resultados antes de seleccionar el objeto anónimo con elRank Propiedad, pero el pedido termina perdiéndose. Parece que linq a las entidades descarta el orden de los conjuntos separados y vuelve al orden natural durante ambosConcat yUnion.

Lo que creo que puedo hacer es transformar dinámicamente la expresión definida en elorderBy variable desdex => x.Name ax => x.Entity.Name, pero no estoy seguro de cómo

if (orderBy != null)
{
    var transformedExpression = ???
    rankedResults = rankedResults.ThenBy(transformedExpression);
}

¿Cómo podría ser capaz de usarExpression.Lambda envolverx => x.Name dentrox => x.Entity.Name? Cuando codigo durox => x.Entity.Name en elThenBy Tengo el pedido que quiero, pero elorderBy es proporcionado por la clase que llama de la consulta, por lo que no quiero incluirlo en el código. Lo tengo en el ejemplo anterior para simplificar la explicación solamente.

Respuestas a la pregunta(2)

Su respuesta a la pregunta