加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Linq如何工作(幕后)?

发布时间:2020-12-15 00:24:30 所属栏目:大数据 来源:网络整理
导读:我正在考虑为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,我会让你知道他们什么时候. (我也可能会博客.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读