我们扩展了SqlServerSqlTranslatingExpressionVisitor并重写了几个访问者方法,以便针对某些数据类型/比较重写查询的特定部分。这可以按预期工作,但是为了在访问/转换给定的ParameterExpression时优化结果表达式,我们需要检查相应的参数值。
我们花了几天的时间检查代码并测试不同的场景,但是仍然很不幸。有谁知道在SqlServerSqlTranslatingExpressionVisitor的上下文中是否可以访问查询参数(在QueryContext.ParameterValues上找到),如果可以,如何?还有其他想法吗?
已解决:
找到了另一个解决方案。最初的方法是错误的。由于查询的原因,不应根据参数更改表达式。我们仍然在SqlServerSqlTranslatingExpressionVisitor中重写某些表达式以采用特定的SQL Server选项,但与查询参数无关。
所需的参数转换将转为ParameterExtractingExpressionVisitor的子类,在此我们现在根据需要进行初始数据类型转换。