List<T> list=new List<T>();
//获取属性
PropertyInfo pi = typeof(T).GetProperty("PropertyName");
//获取类型
ParameterExpression parameter = Expression.Parameter(typeof(T));
//获取lambda数据集
Expression source = list.AsQueryable().Expression;
//组装lambda, 效果: t.PropertyName
Expression body = Expression.Property(parameter, pi);
Type sourceParameterType = pi.PropertyType;
//组装lambda, 效果: t=>t.PropertyName
Expression orderby=Expression.Lambda(body, parameter)
//调用指定类型的方法, 效果: Queryable.OrderBy<T>(()=>{})
Expression lambda = Expression.Call(typeof(Queryable),
isAscending ? "OrderBy" : "OrderByDescending",
new Type[] { typeof(T), sourceParameterType },
source,
orderby);
IEnumerable<T> results = list.AsQueryable().Provider.CreateQuery<T>(lambda)
.Skip((nPageNumber - 1) * nPageSize)
.Take(nPageSize)
.ToList();