分类:
MVC
public static class EXOrderBy { //1 public static IQueryable<TSource> BFMyOrderBy<TSource>(this IQueryable<TSource> source, string Waymane(排序字段名), string stat(点击状态,如果是asc就升序不是就降序)) { if (Waymane != null) { //获取对象里面字段里面的属性 var type = typeof(TSource).GetProperty(Waymane).PropertyType; //指定类里面的指定方法 var method = typeof(EXOrderBy).GetMethod((stat=="asc")?"OrderbyAsc":"OrderbyDAsc"); //给该方法添加需要的属性 method = method.MakeGenericMethod(typeof(TSource) ,type); //强制转换并执行该方法 source = (IQueryable<TSource>)method.Invoke(null, new object[] { source, Waymane }); } return source; } //2 public static IQueryable<TSource> OrderbyAsc<TSource,M>( IQueryable<TSource> source, string Waymane) { source = source.OrderBy(LAMDBA<TSource, M>(source, Waymane)); return source; } //2 public static IQueryable<TSource> OrderbyDAsc<TSource, M>(IQueryable<TSource> source, string Waymane) { source = source.OrderByDescending(LAMDBA<TSource,M>(source, Waymane)); return source; } //3 public static Expression<Func<TSource,M>> LAMDBA<TSource, M>(IQueryable<TSource> source, string Waymane) { //表达式树创建lamdba表达式里面的 a=>a.字段 中的 a(自己命名) var left = Expression.Parameter(typeof(TSource), "a"); //表达式树创建lamdba表达式里面的 a=>a.字段 中的 字段 (自己命名) var body = Expression.Property(left, Waymane); //生成 lmadba表达式 a=>a.字段 Expression<Func<TSource, M>> lamdba = Expression.Lambda<Func<TSource, M>>(body, left); return lamdba; } }
评价