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

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

/// <summary>  
/// 根据指定属性名称对序列进行排序  
/// </summary>  
/// <typeparam name="TSource">source中的元素的类型</typeparam>  
/// <param name="source">一个要排序的值序列</param>  
/// <param name="property">属性名称</param>  
/// <param name="descending">是否降序</param>  
/// <returns></returns>  
public static IQueryable<TSource> OrderBy<TSource>(this IQueryable<TSource> 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<TSource>(resultExp);  
}  

使用:

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

 

posted @ 2020-10-30 09:52  点滴一言  阅读(507)  评论(0)    收藏  举报