Example #1
0
 /// <summary>
 /// 添加规则
 /// </summary>
 public virtual void AddRule(IReqRule rule)
 {
     if (Rules.All(m => !m.Equals(rule)))
     {
         Rules.Add(rule);
     }
 }
Example #2
0
 protected virtual string ParseReqRuleToSql(IReqRule rule)
 {
     if (rule is ReqRule reqRule)
     {
         return(FormatReqRule(reqRule));
     }
     else if (rule is ReqMultiRule multiRule)
     {
         return(ParseReqRuleListToSql(multiRule.Rules.ToList(), multiRule));
     }
     else if (rule is ReqBetweenRule betweenRule)
     {
         return(FormatReqBetweenRule(betweenRule));
     }
     throw new Exception($"无法解析的过滤规则({rule.GetType().FullName})");
 }
Example #3
0
        protected virtual string ParseReqRuleListToSql(IList<IReqRule> rules, IReqRule parentRule = null)
        {
            StringBuilder sqlStr = new StringBuilder(" ( ");
            if (!(parentRule is ReqMultiRule) && rules.Count > 0 && rules[0].Link == ConditionLink.Or)
            {
                throw new Exception($"解析sql脚本失败,分组的第一个过滤条件连接符不能为 Or");
            }

            for (int i = 0; i < rules.Count; i++)
            {
                var rule = rules[i];
                if (i != 0)
                {
                    sqlStr.Append(ParseConditionLink(rule.Link));
                }
                sqlStr.Append(ParseReqRuleToSql(rule));
            }

            sqlStr.Append(" ) ");
            return sqlStr.ToString();
        }