当前位置 : 主页 > 网络编程 > lua >

Linq如何工作(幕后)?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我正在考虑为Lina做一些像Luq这样的东西,而且我有一个普遍的想法, Linq如何工作,但是想知道如果有一篇很好的文章,或者有人可以解释C#如何使Linq成为可能 注意:我的意思是幕后,就像它
我正在考虑为Lina做一些像Luq这样的东西,而且我有一个普遍的想法, Linq如何工作,但是想知道如果有一篇很好的文章,或者有人可以解释C#如何使Linq成为可能

注意:我的意思是幕后,就像它如何生成代码绑定和所有这些,而不是终端用户的语法.

很难回答这个问题,因为LINQ是很多不同的东西.例如,坚持C#,涉及到以下事项:

>查询表达式被“预处理”为“没有查询表达式的C#”,然后正常编译.规范的查询表达式部分真的很短 – 它基本上是一个机械翻译,它不会对查询的真正含义做任何事情,超出了“顺序被翻译成OrderBy / ThenBy / etc”.
>代表用于表示具有特定签名的任意动作,作为可执行代码.
>表达式树用于表示相同的东西,但是作为数据(可以被检查和翻译成不同的形式,例如SQL)
> Lambda表达式用于将源代码转换为委托或表达式树.
>扩展方法被大多数LINQ提供者用于链接静态方法调用.这允许简单的接口(例如IEnumerable T)有效地获得更多的功率.
>匿名类型用于投影 – 您有一些不同的数据集合,并且您希望该数据的每个方面的一部分,匿名类型允许您一起收集.
>隐式类型的局部变量(var)主要用于处理匿名类型时,要保持静态类型语言,您可能无法明确地说出类型的名称.
迭代器块通常用于实现进程中的查询,例如对于LINQ to Objects.
>类型推断用于使整个事情变得更加顺利 – LINQ中有很多通用的方法,没有类型推断,这将是非常痛苦的.
>代码生成用于将模型(例如DBML)转换为代码
>部分类型用于为生成的代码提供可扩展性
>属性用于向LINQ提供者提供元数据

很明显,这些不仅仅是LINQ使用,而是不同的LINQ技术将取决于它们.

如果您能更多地指出您感兴趣的方面,我们可能会提供更多的细节.

如果您有兴趣有效地实现LINQ to Objects,您可能会对几天前阅读的DDD中的一个演讲感兴趣 – 基本上在一小时内尽可能多地实现了LINQ to Object.我们在结束之前还远远没有完成,但它应该对您需要做的事情(以及缓冲/流式传输,迭代器块,查询表达式转换等)给出一个很好的了解.视频还没有(我还没有下载代码),但如果你有兴趣,请给我一封邮件skeet@pobox.com,我会让你知道他们什么时候. (我也可能会博客.)

网友评论