Estoy intentando generar una cláusula LINQ OrderBy
usando expresiones lambda con una entrada del nombre de columna de una entidad como cadena (en la variable "sortOn" a continuación).Creando una expresión OrderBy Lambda basada en la propiedad de la entidad hijo
El código siguiente funciona bien para un valor sortOn como "Código" generación de la lambda
p => p.Code
pero también me gustaría ordenar en una entidad secundaria, donde el lambda podría ser
p => p.Category.Description
Por lo tanto, en este caso, me gustaría establecer sortOn = "Category.Description" y generar la expresión lamdba correcta.
¿Esto es posible? Cualquier sugerencia sobre la mejor manera de hacer esto sería bienvenida.
Este código funciona bien para el caso sencillo:
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);
}
El caso de uso para este problema está mostrando una cuadrícula de datos y ser capaz de ordenar los datos, simplemente pasando el nombre de la columna que desee ordenar de vuelta al servidor. Me gustaría hacer que la solución sea genérica, pero he comenzado a usar un tipo particular (Producto en el ejemplo) por ahora.
¿Por qué estás creando expresiones manualmente? –