| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | 
							- using System;
 
- using System.Linq;
 
- using System.Linq.Expressions;
 
- namespace InABox.Core
 
- {
 
-     internal class ParameterReplacer : ExpressionVisitor
 
-     {
 
-         private readonly ParameterExpression _parameter;
 
-         internal ParameterReplacer(ParameterExpression parameter)
 
-         {
 
-             _parameter = parameter;
 
-         }
 
-         protected override Expression VisitParameter(ParameterExpression node)
 
-         {
 
-             return base.VisitParameter(_parameter);
 
-         }
 
-     }
 
-     public static class IQueryableExtensions
 
-     {
 
-         public static IOrderedQueryable<T> SortBy<T>(this IQueryable<T> source, Expression property)
 
-         {
 
-             return source.OrderBy(ToLambda<T>(property));
 
-         }
 
-         public static IOrderedQueryable<T> SortByDescending<T>(this IQueryable<T> source, Expression property)
 
-         {
 
-             return source.OrderByDescending(ToLambda<T>(property));
 
-         }
 
-         public static Expression<Func<T, object>> ToLambda<T>(Expression property)
 
-         {
 
-             //var type = typeof(T);
 
-             //var body = property;
 
-             //var parameter = Expression.Parameter(type,"x");
 
-             //var delegateType = typeof(Func<,>).MakeGenericType(type, typeof(Object));
 
-             //dynamic lambda = Expression.Lambda(delegateType, body, parameter);
 
-             //dynamic comp = lambda.Compile();
 
-             //return comp;
 
-             var paramExpr = Expression.Parameter(typeof(T));
 
-             var exprBody = Expression.Convert(property, typeof(object));
 
-             var replBody = new ParameterReplacer(paramExpr).Visit(exprBody);
 
-             var finalExpr = Expression.Lambda<Func<T, object>>(replBody, paramExpr);
 
-             return finalExpr;
 
-         }
 
-     }
 
- }
 
 
  |