BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Kevin Halverson:如何实现IQueryable

| 作者 Jonathan Allen 关注 530 他的粉丝 ,译者 朱永光 关注 0 他的粉丝 发布于 2007年7月28日. 估计阅读时间: 2 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

在一个包含两个部分的系列文章中,Kevin Halverson演示了如何通过实现IQueryable 和 IQueryProvider 接口来创建一个LINQ提供器。他特别使用了Windows Desktop Search作为一个数据源。

他以解释CreateQuery方法的工作原理作为开头。在他的例子当中,Kevin把一个抽象的语法树转换成了适合Windows Desktop Search使用的SQL语句。

抽象语法树是一个表示为对象集合的表达式。其通常作为原始代码到编译代码的中间物,它也能被用在应用程序自我检查的运行时中。

Kevin介绍的另外一个概念是闭包。闭包,和lambda表达式相关的一个概念,贯穿整个LINQ查询的设计。

当然,Linq构架都是围绕着延时执行的概念而展开。也就是说,我在某时创建了一个查询,但是我并没有真正地计算它(获取输入的值并查询背后的数据源),直到我开始使用这个查询的计算结果。由于这个原因,我们打算获取到如何访问cutoffDate内容的信息,但不想保存这个值。我可以在查询字符串中放入一个记号([value*]),然后在查询结果可以被访问的时候,创建一个用来得到cutoffDate值的函数。

抽象语法树的一个有趣的副作用是你能完全用另外一个函数来代替某个函数的调用。在这个例子中,函数LikeString被转换成了SQL的Like操作符。

在第二部分,Kevin通过对GetEnumerator函数的讨论完成了整个演练。在这里,对其它技术(如:编译一个抽象语法树和解析闭包中的变量)也进行了讨论。

查看英文原文:Kevin Halverson: How to implement IQueryable

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT