Linq自定义排序的写法(方法二)


这个是我在网上百度的方法存在一定问题,先进行记录,之后修改;

///   
/// 根据指定属性名称对序列进行排序  
///   
/// source中的元素的类型  
/// 一个要排序的值序列  
/// 属性名称  
/// 是否降序  
///   
public static IQueryable OrderBy(this IQueryable source, string property, bool descending) where TSource : class  
{  
ParameterExpression param = Expression.Parameter(typeof(TSource), "c");  
PropertyInfo pi = typeof(TSource).GetProperty(property);  
MemberExpression selector = Expression.MakeMemberAccess(param, pi);  
LambdaExpression le = Expression.Lambda(selector, param);  
string methodName = (descending) ? "OrderByDescending" : "OrderBy";  
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), methodName, new Type[] { typeof(TSource), pi.PropertyType }, source.Expression, le);  
return source.Provider.CreateQuery(resultExp);  
}  

使用:

using (Entities entitys = new Entities())  
{  
var lists = Kits.OrderBy(entitys.Members.Where(n => true), "MemberId", true).ToList();  
}  

相关