/// <summary> /// 转换单个查询条件为Sql文本 /// </summary> /// <param name="conditon"></param> /// <param name="parameterDictionary"></param> /// <returns></returns> private static string ToSubSqlText(QueryCondition conditon, Dictionary <string, int> parameterDictionary, string escapeSymbol) { if (conditon != null && ConditionToSql.CheckConditionIsValid(conditon)) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(" "); stringBuilder.Append(ConditionToSql.GetLinkType(conditon.LinkType)); stringBuilder.Append(" "); // 如果有子级查询条件,则遍历构造子级查询条件 if (conditon.SubQuery != null && conditon.SubQuery.Length > 0) { string subSqlText = string.Empty; QueryCondition[] subQuery = conditon.SubQuery; for (int i = 0; i < subQuery.Length; i++) { QueryCondition subConditon = subQuery[i]; subSqlText += ConditionToSql.ToSubSqlText(subConditon, parameterDictionary, escapeSymbol); } if (!string.IsNullOrEmpty(subSqlText)) { stringBuilder.Append("("); stringBuilder.Append(ConditionToSql.FixSQLText(subSqlText)); stringBuilder.Append(")"); } } else { stringBuilder.Append(escapeSymbol[0]); stringBuilder.Append(conditon.Property.ToString()); stringBuilder.Append(escapeSymbol[1]); stringBuilder.Append(" "); stringBuilder.Append(ConditionToSql.GetCompareType(conditon)); stringBuilder.Append(" "); if (conditon.CompareType == CompareType.In || conditon.CompareType == CompareType.NotIn) { stringBuilder.Append("("); } stringBuilder.Append(ConditionToSql.GetParameterName(conditon, parameterDictionary)); if (conditon.CompareType == CompareType.In || conditon.CompareType == CompareType.NotIn) { stringBuilder.Append(")"); } } return(stringBuilder.ToString()); } return(string.Empty); }
/// <summary> /// 转换单个查询条件为Sql参数 /// </summary> /// <param name="conditon"></param> /// <param name="parameterList"></param> /// <param name="parameterDictionary"></param> private static void ToSubSqlParas(QueryCondition conditon, List <DbParameter> parameterList, Dictionary <string, int> parameterDictionary, DbType dbType) { if (conditon != null && ConditionToSql.CheckConditionIsValid(conditon)) { if (conditon.SubQuery != null && conditon.SubQuery.Length > 0) { QueryCondition[] subQuery = conditon.SubQuery; for (int i = 0; i < subQuery.Length; i++) { QueryCondition subConditon = subQuery[i]; ConditionToSql.ToSubSqlParas(subConditon, parameterList, parameterDictionary, dbType); } } if (!string.IsNullOrEmpty(conditon.Property.ToString())) { ConditionToSql.GetParameterObject(conditon, parameterList, parameterDictionary, dbType); } } }