Jak mogę przekształcić to wyrażenie linq?

Powiedzmy, że mam encję, której chcę użyć w rankingu:

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

W moim zapytaniu mam następujące:

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();

Próbowałem zamówić wyniki przed wybraniem anonimowego obiektu za pomocąRank nieruchomości, ale zamawianie kończy się zgubieniem. Wydaje się, że linq do jednostek odrzuca porządkowanie oddzielnych zestawów i konwertuje z powrotem do naturalnego porządku podczas obuConcat iUnion.

Myślę, że mogę to zrobić dynamicznie przekształcić wyrażenie zdefiniowane worderBy zmienna odx => x.Name dox => x.Entity.Name, ale nie jestem pewien, jak:

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

Jak mógłbym użyćExpression.Lambda zawijaćx => x.Name wx => x.Entity.Name? Kiedy utrudniam kodx => x.Entity.Name wThenBy Dostaję zamówienie, które chcę, aleorderBy jest dostarczany przez klasę wywołującą kwerendę, więc nie chcę go wpisywać na stałe. W powyższym przykładzie został on zakodowany na sztywno tylko dla uproszczenia wyjaśnień.

questionAnswers(2)

yourAnswerToTheQuestion