public static Func <Expression, Expression, Expression> GetCompareExpression(this EnumFilterCompare compare) { Func <Expression, Expression, Expression> expr = Expression.Equal; switch (compare) { case EnumFilterCompare.LT: expr = Expression.LessThan; break; case EnumFilterCompare.LTE: expr = Expression.LessThanOrEqual; break; case EnumFilterCompare.GT: expr = Expression.GreaterThan; break; case EnumFilterCompare.GTE: expr = Expression.GreaterThanOrEqual; break; case EnumFilterCompare.Begins: expr = (Expression exp1, Expression exp2) => { // увы с case ignore орм не может составить запрос и выполняет фильтрацию после запроса // но мы можем вызвать ToLower(), но это тоже не вариант ибо индексы идут лесом, а хотя индексы и так идут лесом var meth = typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) /*, typeof(StringComparison)*/ }); var func = Expression.Call(exp1, meth, exp2 /*, Expression.Constant(StringComparison.OrdinalIgnoreCase, typeof(StringComparison))*/); return(func); }; break; case EnumFilterCompare.Ends: // todo break; case EnumFilterCompare.Include: // todo break; } return(expr); }
private void _init(Controller2Garin controller, string title, string placeholder, EnumHtmlType htmlType, bool isRequired, bool needTranslate, bool isMultiple, string propertyName, int priority, List <string> Default, EnumFilterCompare compare = EnumFilterCompare.Equals, string format = null) { Controller = controller; Logger = controller.LoggerFactory.CreateLogger(GetType().FullName); HtmlType = htmlType; PropertyName = propertyName; Priority = priority; IsRequired = isRequired; NeedTranslate = needTranslate; IsMultiple = isMultiple; Title = title; Placeholder = placeholder; Compare = compare; Format = format; //this.Default = Default; this.Default = ParseValuesFromStrings(Default); }
public Field(Controller2Garin controller, string title, string placeholder, EnumHtmlType htmlType, bool isRequired, bool needTranslate, bool isMultiple, string propertyName, int priority, List <string> Default, EnumFilterCompare compare = EnumFilterCompare.Equals, string format = null) { _init(controller, title, placeholder, htmlType, isRequired, needTranslate, isMultiple, propertyName, priority, Default, compare, format); }