¿Cómo pasar múltiples expresiones a OrderBy para EF?
Estoy usando EF 4.2, pero espero que esto también se aplique a EF 4 y 4.1.
Me gustaría pasar unIQueryable<T>
y múltiplesExpression<Func<TSource, TKey>>
a un método y que el método apliqueOrderBy
yThenBy
alIQueryable<T>
según sea apropiado
Encontréesta respuesta, y escribió el siguiente método basado en eso:
public IQueryable<User> ApplyOrderBy(IQueryable<User> query, IEnumerable<Expression<Func<User, IComparable>>> orderBy)
{
if (orderBy == null)
{
return query;
}
IOrderedQueryable<User> output = null;
foreach(var expression in orderBy)
{
if (output == null)
{
output = query.OrderBy(expression);
}
else
{
output = output.ThenBy(expression);
}
}
return output ?? query;
}
Esto funciona bien siempre que las propiedades que ordene seanstring
s, pero cuando trato de ordenar por unint
propiedad, obtengo una excepción:
No se puede emitir el tipo 'System.Int32' para escribir 'System.IComparable'. LINQ to Entities solo admite la conversión de tipos primitivos del modelo de datos de entidad.
¿Alguna sugerencia para solucionar esto o para un enfoque completamente diferente? Pensé en pasar unIEnumerable<Expression>
, pero luego necesitaría descubrir cómo volver a emitir al tipo específico (por ejemplo,Expression<Func<User, int>
) llamarOrderBy
.