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(); }