Дополню ответы методом сортировки по названию свойства
public static IOrderedQueryable<TSource> OrderByAscOrDesc<TSource>(this IQueryable<TSource> query, string propName, bool isDesc)
{
var entityType = typeof(TSource);
var propInfo = entityType.GetProperty(propName);
if (propInfo.DeclaringType != entityType)
propInfo = propInfo.DeclaringType.GetProperty(propName);
if (propInfo == null) return (IOrderedQueryable<TSource>)query;
var arg = Expression.Parameter(entityType, "x");
var property = Expression.MakeMemberAccess(arg, propInfo);
var selector = Expression.Lambda(property, new ParameterExpression[] { arg });
var methodName = isDesc ? "OrderByDescending" : "OrderBy";
var method = typeof(Queryable).GetMethods()
.Where(x => x.Name == methodName && x.IsGenericMethodDefinition)
.Where(x => x.GetParameters().Length == 2)
.Single();
var genericMethod = method.MakeGenericMethod(entityType, propInfo.PropertyType);
return (IOrderedQueryable<TSource>)genericMethod.Invoke(genericMethod, new object[] { query, selector });
}