/// <summary> /// 转换为无参where语句 /// </summary> /// <param name="tableFieldInfoDic">表字段字典集合[key:表名;value:[key:字段名;value:DBFieldInfo]]</param> /// <param name="tableAliaNameDic">表别名字典集合[key:列名;value:别名]</param> /// <param name="filedValueConverterCollection">数据库字段值转换对象集合</param> /// <param name="fieldValueFormator">字段值格式化对象</param> /// <returns>where语句</returns> public string ToWhereNoParameter(Dictionary <string, Dictionary <string, DBFieldInfo> > tableFieldInfoDic, Dictionary <string, string> tableAliaNameDic, DBFiledValueConverterCollection filedValueConverterCollection, ISqlFieldValueFormator fieldValueFormator) { var sbSql = new StringBuilder(); var para = new ConditionValueNoSqlParaGeneratorPara(sbSql, fieldValueFormator); this.CreateQueryFieldWhereSqlNoParameter(para, tableAliaNameDic, tableFieldInfoDic, this, filedValueConverterCollection); return(sbSql.ToString()); }
private void CreateQueryFieldWhereSqlNoParameter(ConditionValueNoSqlParaGeneratorPara para, Dictionary <string, string> tableAliaNameDic, Dictionary <string, Dictionary <string, DBFieldInfo> > tableFieldInfoDic, ExpressionNodeCollection conditionExpressionNodes, DBFiledValueConverterCollection dbFiledValueConverterCollection) { if (conditionExpressionNodes == null || conditionExpressionNodes.Count == 0) { return; } ExpressionNodeCollection childrenConditionExpressionNodes; DBFieldInfo dbFieldInfo; CompareOperaterAttribute compareOperaterAttribute; int lastIndex = conditionExpressionNodes.Count - 1; for (int i = 0; i < conditionExpressionNodes.Count; i++) { var expressionNode = conditionExpressionNodes.ElementAt(i); childrenConditionExpressionNodes = expressionNode.Children; if (childrenConditionExpressionNodes == null || childrenConditionExpressionNodes.Count == 0) { //无子节点 dbFieldInfo = tableFieldInfoDic[expressionNode.TableName][expressionNode.FieldName]; para.FieldInfo = dbFieldInfo; para.DBFiledValueConverter = dbFiledValueConverterCollection.GetDBFiledValueConverter(dbFieldInfo); if (tableAliaNameDic.ContainsKey(expressionNode.TableName)) { para.TableAliaName = tableAliaNameDic[expressionNode.TableName]; } else { para.TableAliaName = expressionNode.TableName; } para.ValueList = expressionNode.ValueList; para.Operater = expressionNode.Operater; compareOperaterAttribute = CompareOperaterHelper.GetCompareOperaterAttributeByCompareOperater(expressionNode.Operater); compareOperaterAttribute.ConditionValueGenerator.GenerateNoPara(para); if (i < lastIndex) { para.SqlStringBuilder.Append(DBConstant.BLACK_SPACE); para.SqlStringBuilder.Append(conditionExpressionNodes.LogicOperaters.ToString()); para.SqlStringBuilder.Append(DBConstant.BLACK_SPACE); } } else { //有子节点 para.SqlStringBuilder.Append('('); this.CreateQueryFieldWhereSqlNoParameter(para, tableAliaNameDic, tableFieldInfoDic, childrenConditionExpressionNodes, dbFiledValueConverterCollection); para.SqlStringBuilder.Append(')'); } } }