tnblog
首页
视频
资源
登录

自定义 OrderBy 实现升降序

6243人阅读 2021/4/1 10:19 总访问:116003 评论:0 收藏:0 手机
分类: 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;
        }
    }


评价
.
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术