我正在考虑为Lua制作Linq这样的东西,我对Linq的工作原理有一个大概的了解,但我想知道是否有一篇好文章或是否有人可以解释C#如何使Linq成为可能
注意:我的意思是在幕后,比如它如何生成代码绑定以及所有这些,而不是最终用户语法。
答案 0 :(得分:18)
很难回答这个问题,因为LINQ有很多不同的东西。例如,坚持使用C#,涉及以下内容:
IEnumerable<T>
)有效地获得更多的权力。var
)主要用于处理匿名类型,以维护静态类型语言,您可能无法明确地“说出”该类型的名称。显然,其中很多都不是仅使用LINQ,但不同的LINQ技术将依赖于它们。
如果您可以更多地说明您感兴趣的方面,我们可能会提供更多详细信息。
如果你对有效实现LINQ to Objects感兴趣,你可能会对我几周前在DDD中给DDD的讲话感兴趣 - 基本上在一小时内尽可能多地实现LINQ to Objects。我们在结束时还远未完成,但它应该很好地理解你需要做的事情的种(以及缓冲/流,迭代器块,查询表达式转换等)。视频还没有播放(我还没有下载代码)但如果你有兴趣,请发邮件至skeet@pobox.com,我会告诉你他们什么时候起来。 (我可能也会写博客。)
答案 1 :(得分:3)
Mono(部分?)实现了LINQ,并且是开源的。也许你可以调查他们的实现?
答案 2 :(得分:2)
答案 3 :(得分:2)
也许我的LINQ for R6RS Scheme会提供一些见解。
它在语义上是100%,并且几乎100%在语法上与LINQ相同,除了使用'then'而不是','的其他排序参数之外。
一些规则/假设:
我的实施取决于几个核心程序:
结构的其余部分都是使用宏构建的。
绑定存储在标有绑定标识符的列表中,以确保卫生。在任何表达发生的地方提取和反弹绑定。
我确实跟踪了blog上的进度,这可能会对可能出现的问题提供一些见解。
答案 4 :(得分:2)
有关设计理念,请查看生成Linq的研究项目c omega。根据你的观点,Linq是一个更实用或更淡化的c omega版本。
答案 5 :(得分:1)
Matt Warren的博客提供了所有答案(以及一个示例IQueryable提供程序实现,为您提供了一个先机):