Criando uma expressão OrderBy Lambda com base na propriedade da entidade filha

Estou tentando gerar um LINQOrderBy cláusula usando expressões lambda com uma entrada do nome da coluna de uma entidade como uma string (na variável "sortOn" abaixo).

O código abaixo funciona bem para um valor sortOn como "Código" gerando o lambda

p => p.Code

Mas eu também gostaria de classificar em uma entidade infantil, onde o lambda pode ser

p => p.Category.Description

Portanto, neste exemplo, gostaria apenas de definir sortOn = "Category.Description" e ter a expressão lamdba correta gerada.

Isso é possível? Qualquer sugestão sobre a melhor maneira de fazer isso seria bem-vinda.

Este código funciona bem para o caso simples:

var param = Expression.Parameter(typeof (Product), "p");

var sortExpression = Expression.Lambda<Func<Product, object>>(
    Expression.Property(param, sortOn), param);

if (sortAscending ?? true)
{
   products = products.OrderBy(sortExpression);
}
else
{
   products = products.OrderByDescending(sortExpression);
}

O caso de uso para esse problema é exibir uma grade de dados e poder classificar os dados simplesmente passando o nome da coluna para ser classificado de volta para o servidor. Gostaria de tornar a solução genérica, mas comecei a usar um tipo específico (Produto no exemplo) por enquanto.

questionAnswers(5)

yourAnswerToTheQuestion