Пример #1
0
        public void FilterRecords(List <PerformerStatRecord> allRecords, out string errorStr)
        {
            var func    = FilterFunction.FirstOrDefault(i => i.Value == FunctionSelectedComment) ?? FilterFunction[0];
            var formula = func.Text;

            var resolver = CheckFunction(formula, out errorStr);

            if (resolver == null)
            {
                return;
            }
            var resolverVars = resolver.GetVariableNames();

            var records   = allRecords.ToList();
            var calcError = "";

            records.ForEach(r =>
            {
                // заполнить переменные resolver-а
                var varValue = new Dictionary <string, double>();
                foreach (var name in resolverVars)
                {
                    var val     = formulaProperties[name].GetValue(r);
                    double dVal = val is float
                                  ?(float)val
                                  : val is double
                                  ?(double)val
                                  : val is int?(int)val: val is decimal ? (float)(decimal)val : 0;
                    varValue.Add(name, dVal);
                }
                // посчитать
                try
                {
                    double rst;
                    resolver.Calculate(varValue, out rst);
                    r.FunctionValue = rst;
                }
                catch (Exception ex)
                {
                    calcError       = Resource.ErrorMessageCalculationFunctions + " '" + formula + "': " + ex.Message;
                    r.FunctionValue = 0;
                }
            });
            if (!string.IsNullOrEmpty(calcError))
            {
                errorStr = calcError;
            }

            // вернуть первые N
            Records = (Order == SelectOrder.First
                                    ? records.OrderByDescending(r => r.FunctionValue)
                                    : records.OrderBy(r => r.FunctionValue)).Take(CountAccount).ToList();
        }
        public static void AddFunction(string function, string description)
        {
            var func = FilterFunction.FirstOrDefault(f => f.Text == function);

            if (func != null)
            {
                func.Value = description;
            }
            else
            {
                FilterFunction.Add(new SelectListItem {
                    Value = description, Text = function
                });
            }
            // сохранить настройки
            SiteSettings.Instance.FunctionSettings.Functions = FilterFunction.Select(i => new TraderFilterFunction(i)).ToList();
            SiteSettings.Instance.SaveSettings();
        }
        public static void DeleteFunction(string function)
        {
            if (FilterFunction.Count <= 1)
            {
                return;
            }

            var func = FilterFunction.FirstOrDefault(f => f.Text == function);

            if (func == null)
            {
                return;
            }
            FilterFunction.Remove(func);

            // сохранить настройки
            SiteSettings.Instance.FunctionSettings.Functions = FilterFunction.Select(i => new TraderFilterFunction(i)).ToList();
            SiteSettings.Instance.SaveSettings();
        }