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).