У меня есть выражение, которое имеет все вызовы ко всем пользовательским функциям.Ошибка вычисления выражения NCalc для пользовательской функции
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
Выражение не достаточно. Вы также должны показать свой код. – I4V
Я добавил код. Но это не помогает, потому что выражение вообще не анализируется. –