当前位置: 首页 > news >正文

上海门户网站制作/百度市场应用官方app

上海门户网站制作,百度市场应用官方app,建设工程抗震应当坚持的原则有,做网站推广也要营业执照吗一直没去细想为什么Enumerable和Queryable提供了两套签名一致的方法.今天在扩展IQToolkit,使之支持Insert/Update/Delete的过程中,遇到了问题,用Reflector看了一下Queryable类的源码,顿时醍醐灌顶. 在给代表数据库表格的类EntityTable(实现了IQueryable<TEntity>接口)添加…

一直没去细想为什么Enumerable和Queryable提供了两套签名一致的方法.今天在扩展IQToolkit,使之支持Insert/Update/Delete的过程中,遇到了问题,用Reflector看了一下Queryable类的源码,顿时醍醐灌顶.

在给代表数据库表格的类EntityTable(实现了IQueryable<TEntity>接口)添加一个扩展方法Delete(Expression<Predicate<TEntity>>)来做生成Delete语句的标识时,发现这个方法被直接调用了,觉得很郁闷.明明微软自己的Where, Select等方法都没被调用,而是作为Expression给传到了QueryProvider里, 凭什么我自己写的方法你就不给翻译一下传过去,而是当场执行呢?

不对啊,First, Single之类的方法也是当场执行的啊,难道编译器会根据方法的返回类型(是不是相同的IQueryable<T>)来决定如何对待它们?或者,可能有某个应用于方法上的Attribute,可以控制编译器这方面的行为?

还是看看Queryable里的代码是怎么写的吧.打开Reflector一看Queryable.First方法,马上明白了:

public static TSource First<TSource>(this IQueryable<TSource> source)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    return source.Provider.Execute<TSource>(Expression.Call(null, ((MethodInfo) MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[] { typeof(TSource) }), new Expression[] { source.Expression }));
}

晕了,原来根本不是编译器在捣鬼!这方法纯粹是一混蛋,屁事不干的主.不单屁事不干,还指使别人说,你再来调用我吧..

再看Queryable.Where:

public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    if (predicate == null)
    {
        throw Error.ArgumentNull("predicate");
    }
    return source.Provider.CreateQuery<TSource>(Expression.Call(null, ((MethodInfo) MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[] { typeof(TSource) }), new Expression[] { source.Expression, Expression.Quote(predicate) }));
}

First和Where的区别在于两者调用了不同的方法,一个要求直接执行对应的动作,一个要求返回一个新的IQueryable<T>对象以推迟实际行为的发生.

哎,这世界上怎么那么多比我聪明的人呢?

转载于:https://www.cnblogs.com/deerchao/archive/2009/01/22/1379684.html

http://www.lbrq.cn/news/1410067.html

相关文章:

  • 营销型网站建设合同范本/微博推广方式
  • 中科院网站做的好的院所/网站查询信息
  • 做网站运营需要学什么条件/自己做网站需要什么条件
  • led照明企业网站模板/免费发布信息不收费的网站
  • 网站设计过时/互联网推广运营是干什么的
  • 所得税汇算清缴在哪个网站做/如何优化网页加载速度
  • wordpress中ajax请求/seo培训中心
  • 财政网站 建设方案/百度官方推广
  • 全景图网站怎么做/最新seo课程
  • 装修网站cms/百度指数的功能
  • 阅读的网站建设需要多少钱/竞价广告是什么意思
  • 做网站开发 用什么软件/有哪些网站可以免费推广
  • 网站建设jiq/无锡做网站的公司
  • 免费注册企业网站/torrentkitty磁力官网
  • 专业网站开发/b站推广网站2024年不用下载
  • 网站做飘浮怎么做/软件培训机构
  • 深圳人才网站建设/中国数据网
  • 优秀网页案例/新网站怎么做优化
  • 微商城手机网站制作/嘉兴网站建设方案优化
  • 中国做爰网站/sem招聘
  • 杨和网站建设/百度广告怎么做
  • 上海制作网站的网站/网络推广工作室
  • 个人网站做经营性/如何学会推广和营销
  • 网站建设哪个公司好/百度竞价关键词优化
  • 建网站需要了解什么/qq营销软件
  • 活动vi设计公司/上海百度seo点击软件
  • 济南网站建设/app接入广告变现
  • 代购网站建设/海外推广渠道都有哪些
  • 做公益网站的目的/优秀网站设计赏析
  • 做一个网站大概要多少钱/好口碑关键词优化
  • Apache IoTDB集群部署实战:1C2D架构的高性能时序数据库搭建与优化指南
  • C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
  • Reduce系列
  • 从冒泡到快速排序:探索经典排序算法的奥秘(二)
  • 【Java web】HTTP 协议详解
  • 命令模式C++