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.