Ejemplo n.º 1
0
 /// <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;
 }
Ejemplo n.º 2
0
 public ReqBetweenRule(string field, [NotNull] object startValue, [NotNull] object endValue, ConditionLink link)
 {
     Field      = field;
     StartValue = startValue;
     EndValue   = endValue;
     Link       = link;
 }
Ejemplo n.º 3
0
 public ReqFieldAttribute(string fieldName   = "",
                          FilterOperate op   = FilterOperate.Equal,
                          ConditionLink link = ConditionLink.And)
 {
     FieldName = fieldName;
     Op        = op;
     Link      = link;
 }
Ejemplo n.º 4
0
 public ReqMultiFieldAttribute(string[] fields,
                               FilterOperate op,
                               ConditionLink innerLink,
                               ConditionLink outerLink)
 {
     Fields    = fields;
     Op        = op;
     InnerLink = innerLink;
     OuterLink = outerLink;
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
 /// <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;
 }
Ejemplo n.º 8
0
 public ReqBetweenFieldAttribute(string fieldName, ConditionLink link)
     : this(fieldName, link, '~')
 {
 }
Ejemplo n.º 9
0
 /// <summary>
 /// 使用操作方式初始化一个<see cref="ReqGroup"/>的新实例
 /// </summary>
 /// <param name="link">条件间连接</param>
 public ReqGroup(ConditionLink link)
 {
     Link  = link;
     Rules = new List <IReqRule>();
 }
Ejemplo n.º 10
0
 public ReqMultiRule(ConditionLink link)
 {
     Link  = link;
     Rules = new List <IReqRule>();
 }
Ejemplo n.º 11
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="sortCode"></param>
 /// <param name="link"></param>
 public ReqGroupAttribute(int sortCode, ConditionLink link = ConditionLink.And)
 {
     SortCode = sortCode;
     Link     = link;
 }
Ejemplo n.º 12
0
 public ReqMultiFieldAttribute(string[] fields, FilterOperate op, ConditionLink innerLink)
     : this(fields, op, innerLink, ConditionLink.And)
 {
 }