/******************************
* 说明:动态求值(功能类似于Bs Eval)
* 创建人:龚宇超
* 创建日期:2017-07-24
* 修改人:
* 修改日期:
* 修改备注:
* 版本:1.0.0.0
******************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.CodeDom.Compiler;
using System.Data;
using System.Data.SqlClient;
using Microsoft.JScript;
using Microsoft.JScript.Vsa;
using Lskj.Expression;
namespace Lskj.Util
{
///
/// 动态求值(功能类似于Bs Eval)
///
public class EvalHelper
{
///
/// 数据连接
///
public static SqlConnection _connection;
private static object mEvaluator = null;
private static Type mEvaluatorType = null;
private static readonly string mJscriptSource =
@"class Evaluator
{
public function Eval(expr : String) : String
{
return eval(expr);
}
}";
///
/// 构造JScript的编译驱动代码
///
static EvalHelper()
{
//CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript");
//CompilerParameters parameters;
//parameters = new CompilerParameters();
//parameters.GenerateInMemory = true;
//CompilerResults results;
//results = provider.CompileAssemblyFromSource(parameters, mJscriptSource);
//Assembly assembly = results.CompiledAssembly;
//mEvaluatorType = assembly.GetType("Evaluator");
//mEvaluator = Activator.CreateInstance(mEvaluatorType);
}
///
/// 说明:计算表达式
/// 异常:会抛出Exception,遇到无法计算的公式.
/// 创建人:龚宇超
/// 创建日期:2017-07-24
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// 表达式:如(1+2+3-5)
/// 计算结果
public static object Eval(string statement)
{
return Eval2(statement);
//object obj = string.Empty;
//try
//{
// obj = mEvaluatorType.InvokeMember(
// "Eval",
// BindingFlags.InvokeMethod,
// null,
// mEvaluator,
// new object[] { statement }
// );
//}
//catch (Exception e)
//{
//}
//return obj;
}
///
/// 说明:计算表达式
/// 异常:会抛出Exception,遇到无法计算的公式.
/// 创建人:王一帆
/// 创建日期:2020-03-04
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:2.0
///
/// 表达式:如(1+2+3-5)
/// 计算结果
public static object Eval2(string statement)
{
object obj = string.Empty;
try
{
JSCaller caller = new JSCaller();
obj = caller.Eval(statement);
//obj = "0";
//obj = _evaluatorType.InvokeMember(
// "Eval",
// BindingFlags.InvokeMethod,
// null,
// _evaluator,
// new object[] { statement }
// );
}
catch (Exception ex)
{
//MessageBox.Show("请仔细检查配置列条件[" + statement + "]" + ex.StackTrace + "\r\n" + ex.Message);
}
//if (string.IsNullOrEmpty(obj + ""))
// return true;
return obj;
}
///
/// 说明:(新版)计算表达式
/// 异常:会抛出Exception,遇到无法计算的公式.
/// 创建人:王一帆
/// 创建日期:2022-04-12
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// 表达式:如(1+2+3-5)
/// 计算结果
//public static object Eval(string statement)
//{
// object obj = string.Empty;
// try
// {
// Express exp = new Express("", statement);
// obj = exp.Eval((DataRow)null);
// }
// catch (Exception e)
// {
// }
// return obj;
//}
}
}