2013-08-30 35 views
0

我有一个表达式,它具有对所有自定义函数的所有调用。自定义函数的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 

CODE -

这是我在初始化表达式引擎。

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

表达是不够的。你也应该显示你的代码。 – I4V

+0

我已添加代码。但这并没有帮助,因为表达式根本没有被解析。 –

回答

2

只是||or(小写)替换OR小号

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

但为什么不''或'。我的意思是它的正式支持。 –

+1

@SohamDasgupta'||'或'or'(小写)允许 – I4V

+0

辉煌。我不知道这些区分大小写。但是然后'EvaluateOptions.IgnoreCase'没有效果吗? –