using System.Linq; using System.Linq.Expressions; namespace Znyc.Cloudcar.Admin.Commons.Extend { /// /// public static class ExtQueryable { /// /// /// /// /// /// public static IQueryable OrderBy(this IQueryable source, string ordering) { System.Type type = typeof(T); System.Reflection.PropertyInfo property = type.GetProperty(ordering); ParameterExpression parameter = Expression.Parameter(type, "p"); MemberExpression propertyAccess = Expression.MakeMemberAccess(parameter, property); LambdaExpression orderByExp = Expression.Lambda(propertyAccess, parameter); MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderBy", new[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp)); return source.Provider.CreateQuery(resultExp); } /// /// /// /// /// /// public static IQueryable OrderByDescending(this IQueryable source, string ordering) { System.Type type = typeof(T); System.Reflection.PropertyInfo property = type.GetProperty(ordering); ParameterExpression parameter = Expression.Parameter(type, "p"); MemberExpression propertyAccess = Expression.MakeMemberAccess(parameter, property); LambdaExpression orderByExp = Expression.Lambda(propertyAccess, parameter); MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderByDescending", new[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp)); return source.Provider.CreateQuery(resultExp); } } }