示例#1
0
        /// <summary>
        /// Hàm tính toán công thức
        /// </summary>
        /// <param name="formula">Chuổi công thức - Vd: "basicsalary * workdaycount"</param>
        /// <param name="listElementFormula">
        /// Danh sách đối tượng phần tử
        /// Vd: List<ElementFormula> listElementFormula = new List<ElementFormula>();
        /// lstElementFormula.Add(new ElementFormula("workdaycount", 82, 1));
        /// lstElementFormula.Add(new ElementFormula("basicsalary", 5200000, 2));
        /// <returns></returns>
        //public static object ParseFormula(string formula, List<ElementFormula> listElementFormula)
        //{
        //    object result = 0;
        //    listElementFormula = listElementFormula.OrderBy(v => v.OrderNumber).ToList();
        //    var ce = new CalcEngine.CalcEngine();
        //    foreach (var item in listElementFormula)
        //    {
        //        if (!ce.Variables.Any(m => m.Key == item.VariableName))
        //        {
        //            ce.Variables.Add(item.VariableName, item.Value);
        //        }
        //    }
        //    var x = ce.Parse(formula);
        //    result = x.Evaluate();
        //    if (result.ToString() == "NaN")
        //    { result = 0; }
        //    return result;
        //}

        public static FormulaHelperModel ParseFormula(string formula, List <ElementFormula> listElementFormula)
        {
            FormulaHelperModel result = new FormulaHelperModel();

            try
            {
                listElementFormula = listElementFormula.OrderBy(v => v.OrderNumber).ToList();
                var ce = new CalcEngine.CalcEngine();


                foreach (var item in listElementFormula)
                {
                    if (formula.Contains(item.VariableName))
                    {
                        if (!ce.Variables.Any(m => m.Key.ToUpper() == item.VariableName.ToUpper()))
                        {
                            try
                            {
                                ce.Variables.Add(item.VariableName, item.Value);
                            }
                            catch
                            {
                            }
                        }
                    }

                    //////if (!ce.Variables.Any(m => m.Key.ToUpper() == item.VariableName.ToUpper()))
                    //////{
                    //////    //try
                    //////    //{
                    //////    ce.Variables.Add(item.VariableName, item.Value);
                    //////    //}
                    //////    //catch
                    //////    //{
                    //////    //    string ttt = item.VariableName;
                    //////    //}

                    //////}
                }

                var    x     = ce.Parse(formula);
                object value = x.Evaluate();
                if (value.ToString() == "NaN")
                {
                    value = 0;
                }
                result.Value = value;
                return(result);
            }
            catch (Exception ex)
            {
                result.Value        = 0;
                result.ErrorMessage = ex.Message;
                return(result);
            }
        }
示例#2
0
        /// <summary>
        /// Hàm tính toán công thức
        /// </summary>
        /// <param name="formula">Chuổi công thức - Vd: "basicsalary * workdaycount"</param>
        /// <param name="listElementFormula">
        /// Danh sách đối tượng phần tử 
        /// Vd: List<ElementFormula> listElementFormula = new List<ElementFormula>();
        /// lstElementFormula.Add(new ElementFormula("workdaycount", 82, 1));
        /// lstElementFormula.Add(new ElementFormula("basicsalary", 5200000, 2));
        /// <returns></returns>
        //public static object ParseFormula(string formula, List<ElementFormula> listElementFormula)
        //{
        //    object result = 0;
        //    listElementFormula = listElementFormula.OrderBy(v => v.OrderNumber).ToList();
        //    var ce = new CalcEngine.CalcEngine();
        //    foreach (var item in listElementFormula)
        //    {
        //        if (!ce.Variables.Any(m => m.Key == item.VariableName))
        //        {
        //            ce.Variables.Add(item.VariableName, item.Value);
        //        }
        //    }
        //    var x = ce.Parse(formula);
        //    result = x.Evaluate();
        //    if (result.ToString() == "NaN")
        //    { result = 0; }
        //    return result;
        //}

        public static FormulaHelperModel ParseFormula(string formula, List<ElementFormula> listElementFormula)
        {
            FormulaHelperModel result = new FormulaHelperModel();
            try
            {
                listElementFormula = listElementFormula.OrderBy(v => v.OrderNumber).ToList();
                var ce = new CalcEngine.CalcEngine();


                foreach (var item in listElementFormula)
                {
                    if(formula.Contains(item.VariableName))
                    {
                        if (!ce.Variables.Any(m => m.Key.ToUpper() == item.VariableName.ToUpper()))
                        {
                            try
                            {
                                ce.Variables.Add(item.VariableName, item.Value);
                            }
                            catch
                            {
                            }
                        }
                    }

                    //////if (!ce.Variables.Any(m => m.Key.ToUpper() == item.VariableName.ToUpper()))
                    //////{
                    //////    //try
                    //////    //{
                    //////    ce.Variables.Add(item.VariableName, item.Value);
                    //////    //}
                    //////    //catch
                    //////    //{
                    //////    //    string ttt = item.VariableName;
                    //////    //}

                    //////}
                }

                var x = ce.Parse(formula);
                object value = x.Evaluate();
                if (value.ToString() == "NaN")
                { value = 0; }
                result.Value = value;
                return result;
            }
            catch (Exception ex)
            {
                result.Value = 0;
                result.ErrorMessage = ex.Message;
                return result;
            }
        }