有没有一种方法可以创建我自己的 Linq 子句?我一直在研究扩展方法,但这并不是我想要的。
我在想 where、select 或 from 子句之类的东西。我想像这样使用我的代码
var blah = from bleep in bloops
where bleep == razzie
myclause bleep.property
select bleep;
最佳答案
您无法更改编译器解释查询语句的方式。这些被称为查询理解 - 转换这些的规则直接内置到 C# 编译器中。每个查询都被翻译成适当的调用序列,以调用 Linq 库中的扩展方法。
如果您使用像 Reflector 这样的工具,您将看到相应的扩展方法调用序列,这些表达式被翻译成这些序列。
查询理解的规则在 C# 3.0 specification 中有完整的记录。 .
虽然我同意在某些特定情况下扩展语言中的查询语法可能会有用,但我怀疑它需要大量复杂的编译时处理才能将它们转换为适当的函数调用语法。我认为在大多数情况下,在不影响整个表达式转换方式的情况下,只为特殊情况注入(inject)处理并不容易。
同时,意识到您可以使用链接和常规扩展方法来扩展 Linq 的功能。
关于c# - 如何制作自己的 Linq 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1122647/