首页 新闻 会员 周边 捐助

用Reflector查看System.Linq.Queryable,Min()与Max()两方法代码

0
悬赏园豆:30 [已解决问题] 解决于 2009-12-14 16:47

还有OrderBy()与OrderByDisc..()

请问这是为何呢?

问题补充: 不好意思,标题被截断了。。。。 问题是:用Reflector查看Min()与Max()的源代码,结果它俩长的一摸一样。OrderBy与OrderByDisc..也存在这种情况。
Hunts.C的主页 Hunts.C | 菜鸟二级 | 园豆:266
提问于:2009-11-30 08:56
< >
分享
最佳答案
0
代码
return source.Provider.Execute<TSource>(Expression.Call(null, ((MethodInfo) MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[]
{ typeof(TSource) }), new Expression[] { source.Expression }));

 

代码都是这样吧。

原因在于  MethodBase.GetCurrentMethod() 这一段采用的是模板模式将会返回表示当前正在执行的方法的 MethodBase 对象


收获园豆:25
Jetson Lee | 初学一级 |园豆:115 | 2009-12-01 16:43
查看了下System.Data.Linq 中相关的类,看到最终生成SQL要用到每个方法的方法名来构造恰当的SQL。通过传递当前方法的MethodInfo,最终可区分开Min/Max等。事实上参数相同的方法,内部的sourc.Provider.Execute<TSource>(...)差不多都是相同的。
Hunts.C | 园豆:266 (菜鸟二级) | 2009-12-14 16:52
其他回答(1)
0

排序

收获园豆:5
迟暮 | 园豆:2 (初学一级) | 2009-11-30 09:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册