Budowanie wyrażenia Lambda OrderBy na podstawie właściwości jednostki podrzędnej

Próbuję wygenerować LINQOrderBy klauzula używająca wyrażeń lambda z wprowadzeniem nazwy kolumny encji jako łańcucha (w zmiennej „sortOn” poniżej).

Poniższy kod działa dobrze dla wartości sortOn, takiej jak „Kod” generującej lambdę

p => p.Code

Ale chciałbym też posortować dziecko, gdzie może być lambda

p => p.Category.Description

Więc w tym przypadku chciałbym po prostu ustawić sortOn = "Category.Description" i wygenerować poprawne wyrażenie lamdba.

czy to możliwe? Wszelkie sugestie dotyczące najlepszego sposobu osiągnięcia tego byłyby mile widziane.

Ten kod działa poprawnie w prostym przypadku:

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

Przypadkiem użycia tego problemu jest wyświetlenie siatki danych i możliwość sortowania danych, po prostu przekazując nazwę kolumny, która ma być posortowana z powrotem na serwer. Chciałbym, aby rozwiązanie było ogólne, ale na razie zacząłem używać konkretnego typu (produktu w przykładzie).

questionAnswers(5)

yourAnswerToTheQuestion