internal override string CreateSqlString(CommandFactory factory, bool isFullName, CreateSqlState state) { string sql = state.GetDataSql(this, isFullName); if (sql != null) { return(sql); } List <object> objectList = new List <object> (); object obj; DataFieldInfo info = _callObject as DataFieldInfo; if (!Object.Equals(info, null)) { obj = info.CreateSqlString(factory, isFullName, state); } else { obj = LambdaExpressionExtend.ConvertLambdaObject(_callObject); obj = state.AddDataParameter(factory, obj); } if (_argsObjects != null) { foreach (object item in _argsObjects) { object obj1; DataFieldInfo info1 = item as DataFieldInfo; if (!Object.Equals(info1, null)) { obj1 = info1.CreateSqlString(factory, isFullName, state); } else { obj1 = LambdaExpressionExtend.ConvertLambdaObject(item); obj1 = state.AddDataParameter(factory, obj1); } objectList.Add(obj1); } } switch (_function) { case StringFunction.Substring: if (objectList.Count == 2) { sql = factory.CreateSubStringSql(obj, objectList [0], objectList [1]); } else { sql = factory.CreateSubStringSql(obj, objectList [0], null); } break; case StringFunction.IndexOf: if (objectList.Count == 2) { sql = factory.CreateIndexOfSql(obj, objectList [0], objectList [1]); } else { sql = factory.CreateIndexOfSql(obj, objectList [0], null); } break; case StringFunction.Replace: sql = factory.CreateReplaceSql(obj, objectList [0], objectList [1]); break; case StringFunction.ToLower: sql = factory.CreateToLowerSql(obj); break; case StringFunction.ToUpper: sql = factory.CreateToUpperSql(obj); break; case StringFunction.Trim: sql = factory.CreateTrimSql(obj); break; } state.SetDataSql(this, isFullName, sql); return(sql); }