/// <summary> /// 使用指定数据名称,数据值及操作方式初始化一个<see cref="ReqRule"/>的新实例 /// </summary> /// <param name="field">数据名称</param> /// <param name="value">数据值</param> /// <param name="operate">操作方式</param> public ReqRule(string field, object value, FilterOperate operate, ConditionLink link) { Field = field; Value = value; Operate = operate; Link = link; }
public ReqBetweenRule(string field, [NotNull] object startValue, [NotNull] object endValue, ConditionLink link) { Field = field; StartValue = startValue; EndValue = endValue; Link = link; }
public ReqFieldAttribute(string fieldName = "", FilterOperate op = FilterOperate.Equal, ConditionLink link = ConditionLink.And) { FieldName = fieldName; Op = op; Link = link; }
public ReqMultiFieldAttribute(string[] fields, FilterOperate op, ConditionLink innerLink, ConditionLink outerLink) { Fields = fields; Op = op; InnerLink = innerLink; OuterLink = outerLink; }
protected virtual string ParseConditionLink(ConditionLink link) { string linkStr = ""; switch (link) { case ConditionLink.And : linkStr = " and "; break; case ConditionLink.Or: linkStr = " or "; break; default: linkStr = " and "; break; } return linkStr; }
public static bool ConditionsMet(GameValueCondition[] conditions, Dictionary <string, GameValue> gameValues) //GameValueHolder holder) { { if (conditions == null || conditions.Length == 0) { return(true); } bool met = false; ConditionLink lastLink = ConditionLink.Or; bool falseUntilNextOr = false; for (int i = 0; i < conditions.Length; i++) { bool conditionMet = falseUntilNextOr ? false : conditions[i].IsMet(gameValues); if (lastLink == ConditionLink.Or) { met = met || conditionMet; } else if (lastLink == ConditionLink.And) { met = met && conditionMet; } lastLink = conditions[i].link; if (lastLink == ConditionLink.Or) { if (met) { return(true); } falseUntilNextOr = false; } else if (lastLink == ConditionLink.And) { if (!met) { falseUntilNextOr = true; } } } return(met); }
/// <summary> /// 构造函数 /// </summary> /// <param name="fieldName"></param> /// <param name="split">默认符号 ~</param> public ReqBetweenFieldAttribute(string fieldName = "", ConditionLink link = ConditionLink.And, char split = '~') { FieldName = fieldName; Link = link; Split = split; }
public ReqBetweenFieldAttribute(string fieldName, ConditionLink link) : this(fieldName, link, '~') { }
/// <summary> /// 使用操作方式初始化一个<see cref="ReqGroup"/>的新实例 /// </summary> /// <param name="link">条件间连接</param> public ReqGroup(ConditionLink link) { Link = link; Rules = new List <IReqRule>(); }
public ReqMultiRule(ConditionLink link) { Link = link; Rules = new List <IReqRule>(); }
/// <summary> /// 构造函数 /// </summary> /// <param name="sortCode"></param> /// <param name="link"></param> public ReqGroupAttribute(int sortCode, ConditionLink link = ConditionLink.And) { SortCode = sortCode; Link = link; }
public ReqMultiFieldAttribute(string[] fields, FilterOperate op, ConditionLink innerLink) : this(fields, op, innerLink, ConditionLink.And) { }