¿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 seanstrings, 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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta