杨焯

表达式树【Expression】+反射-实现动态排序

电脑版发表于:2019/10/23 17:09


首先 要实现一个传2个参数的方法,进行动态排序



在写一个方法接收传过来的数据进行处理返回

我们先是拿到sort类型

—>想要实现任意类型我们得用一个方法来中转

TSource就是我们的实体

因为我们不确定传过来的类型是什么 就用泛型(M)来接收 这时处理后的Lef得到的就是({a})body得到的就是({a.sort的值})

执行到  Expression<Func<TSource, M>> Lambda = Expression.Lambda<Func<TSource, M>>(body, lef);的时候

Lambda=(a=>a.sort);这时就刚好达到了我们想要的效果,然后在对Lambda进行排序

这里我们不能直接调用方法,因为直接调用方法还是无法传递类型,所以要用到反射

 -->通过反射拿到方法

var nethod = typeof(EfMyodeby).GetMethod(sortway == "esc" ? "DealAsc" : "DealAdesc");


-->给反射拿到的方法提供泛型 

nethod=  nethod.MakeGenericMethod(typeof(TSource), PropType);

-->反射调用

IQueryable<TSource> reusty = (IQueryable<TSource>)nethod.Invoke(null, new object[] { lamdba, sort });


——>结果



关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢