C# 自定义 Linq 提供程序

标签 c# linq

我正在按照 https://msdn.microsoft.com/en-us/library/bb546158.aspx 中找到的非常有用的文章开发自定义 linq 提供程序。

但是,当涉及到“Not”运算符时,我陷入了困境。例如,我正在使用条件 !a.Name.Equals("2 Test") 进行测试。这将转换为 lambda 表达式 {Not(a.Name.Equals("2 Test"))} .

当我打电话ExpressionVisitor.Visit(expression)时,在这个表达式上,我的VisitMethodCall调用覆盖。然而,MethodCallExpression该调用收到的参数缺少表达式的 Not 部分,即: {a.Name.Equals("2 Test")} .

没有调用其他重写(我已经重写了所有可用的)。这似乎使得无法处理 Not表达式的一部分 - 但我确信事实并非如此!

有人可以帮我解释一下吗? 啊哈,本:)

最佳答案

这是因为 Not 是一元表达式,因此 VisitUnary首先调用方法。

关于C# 自定义 Linq 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40379613/

相关文章:

c# - 使用 LINQ 从一个集合中查找不在另一个集合中的所有键?

c# - Entity Framework 6 上的数据库迁移问题

c# - 如何将 C# SSLStream 客户端连接到 OpenSSL 服务器?

linq - 枚举没有结果?

c# - 将延迟的 IEnumerable<T> 拆分为两个序列而不重新评估?

c# - 0 个或多个项目的 LINQ Single() 异常

c# - 将值传递给 ObjectParameter 变量

c# X509Certificate2 添加证书如何标记为可导出

c# - 何时在我的 ASP.Net MVC 5 razor 语法 View 中使用@using

Java/Android C# linq 的最佳等价物