c# - 如何制作自己的 Linq 子句?

标签 c# .net linq .net-3.5

有没有一种方法可以创建我自己的 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/

相关文章:

.net - 将设置保存到可执行的 VB.Net

c# - 请帮助我将 SQL 转换为 LINQ

c# - GDI+ 图像比 C# 图像快得多

c# - 在 C# 中将帖子标题转换为 URL 的最佳方法

c# - 在 C# 或 VB.NET 中不能做什么,您可以在 MSIL 中做什么?

c# - 如何解决小数和 double 之间的数学错误?

C#和SQL数据复制

c# - 这个多行 if 语句是否太复杂?

c# - 如何在 LINQ 中按月汇总数据?

asp.net-mvc - 将Using Blocks放入存储库中有什么问题?