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);
}
}
}