
- 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;
- }
- }
评价