我有一个表达式,它可以调用所有自定义函数。
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
答案 0 :(得分:2)
只需将OR
替换为||
或or
(小写)
IIF(FVAL(DES_CODE)=1039 || FVAL(DES_CODE)=1040 || FVAL(DES_CODE)=1034,0,TBLEVA(PTAX, FVAL(HOPO_GRS)))