/// <summary> /// 添加规则 /// </summary> public virtual void AddRule(IReqRule rule) { if (Rules.All(m => !m.Equals(rule))) { Rules.Add(rule); } }
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})"); }
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(); }