比如这个
IOrderedQueryable<TSource> Queryable.OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector)
先反射方法名把同名方法列表拉出来,然后反射参数信息,把参数数量类型顺序都匹配的拉出来,正常情况下应该只剩一个符合条件的了。最后 call 进表达式树里就行。我有一篇动态构造表达式的文章,你可以去看看参考一下。
。。。反射这个干啥?
动态构造表达式树(Expression),动态调用排序,实现查询的动态化。
@百香居士: 这玩意儿不是已经够动态了吗?
@顾晓北: 只要他还依赖类型就还不够,sql就不依赖类型,所以用sql做查询,数据库不需要预定义任何接口。所以,我的目标是让web api也做到如此,当然还是需要几行代码来配置的。
@顾晓北: 不小心点到了反对,希望你不要介意。