0

我有一个表达式,它可以调用所有自定义函数。

IIF(FVAL(DES_CODE)=1039 OR FVAL(DES_CODE)=1040 OR FVAL(DES_CODE)=1034,0,TBLEVA(PTAX, FVAL(HOPO_GRS)))

尝试评估此表达式时,NCalc引擎会产生错误。我不知道为什么。表达式中声明的所有函数都已在表达式EvalFunction事件中处理。那么为什么会出现这个错误呢?

mismatched input 'OR' expecting ')' at line 1:24 missing EOF at 'OR' at line 1:47

代码 -

这是我初始化表达式引擎的地方。

Dim exp As New Expression(vbCode, EvaluateOptions.IgnoreCase)
AddHandler exp.EvaluateParameter, AddressOf EvalParameters
AddHandler exp.EvaluateFunction, AddressOf EvalFunction
xReturn = Convert.ToDecimal(exp.Evaluate())

这些是表达式的事件。

Public Sub EvalFunction(ByVal name As String, ByVal args As FunctionArgs)
    Select Case name.ToUpper.Trim
        Case "FVAL"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.Fval(xobj(0))
        Case "ORIGINALVAL"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.ORIGINALVAL(xobj(0))
        Case "IIF"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.IIF(xobj(0), xobj(1), xobj(2))
        Case "LOANDEDUCT"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.LOANDEDUCT(xobj(0))
        Case "TBLEVA"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.TBLEVA(xobj(0), xobj(1))
        Case "PERIODMONTH"
            args.Result = fc.PERIODMONTH()
        Case "PERIODSTART"
            args.Result = fc.PERIODSTART()
        Case "AGE"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.Age(xobj(0))
        Case "INT"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.Age(xobj(0))
    End Select
End Sub
Public Sub EvalParameters(ByVal name As String, ByVal args As ParameterArgs)
    args.Result = name
End Sub
4

1 回答 1

2

只需将ORs替换为||or or(小写)

IIF(FVAL(DES_CODE)=1039 || FVAL(DES_CODE)=1040 || FVAL(DES_CODE)=1034,0,TBLEVA(PTAX, FVAL(HOPO_GRS)))
于 2013-08-30T10:33:56.327 回答