public List <Rol> getByQuery(String nombreRol, KeyValuePair <String, Boolean> estado, Funcionalidad funcionalidad)
        {
            List <Rol> roles = new List <Rol>();
            String     query = "SELECT r.idRol FROM LOS_BORBOTONES.Rol r";

            //Consulta SIN FILTRO
            if (nombreRol.Equals("") && estado.Key == null && funcionalidad == null)
            {
                roles = this.getAll();
            }
            else
            {
                //Consulta CON FILTROS
                //PREPARO TODO PARA HACER LA CONSULTA
                String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
                SqlConnection sqlConnection    = new SqlConnection(connectionString);
                SqlCommand    sqlCommand       = new SqlCommand();
                SqlDataReader reader;
                sqlCommand.CommandType = CommandType.Text;
                sqlCommand.Connection  = sqlConnection;

                //Booleano que uso para armar bien la consulta
                Boolean primerCriterioWhere = true;

                //Consulta por FUNCIONALIDAD
                //Va primero porque el JOIN va antes que el WHERE
                if (funcionalidad != null)
                {
                    sqlCommand.Parameters.AddWithValue("@Funcionalidad", funcionalidad.getDescripcion());
                    query = query + " INNER JOIN LOS_BORBOTONES.Funcionalidad_X_Rol fxr ON r.idRol = fxr.idRol INNER JOIN LOS_BORBOTONES.Funcionalidad f ON f.idFuncionalidad = fxr.idFuncionalidad WHERE f.Descripcion = @Funcionalidad";
                    primerCriterioWhere = false;
                }

                //AGREGO FILTRO NOMBRE
                if (!nombreRol.Equals(""))
                {
                    if (primerCriterioWhere)
                    {
                        query = query + " WHERE r.Nombre LIKE @Nombre";
                        primerCriterioWhere = false;
                    }
                    else
                    {
                        query = query + " AND r.Nombre LIKE @Nombre";
                    }
                    sqlCommand.Parameters.AddWithValue("@Nombre", "%" + nombreRol + "%");
                }

                //AGREGO FILTRO ESTADO
                if (estado.Key != null)
                {
                    if (primerCriterioWhere)
                    {
                        query = query + " WHERE r.Activo = @Estado";
                        primerCriterioWhere = false;
                    }
                    else
                    {
                        query = query + " AND r.Activo = @Estado";
                    }
                    sqlCommand.Parameters.AddWithValue("@Estado", Convert.ToInt32(estado.Value));
                }

                //HAGO LA CONSULTA
                sqlCommand.CommandText = query;
                sqlConnection.Open();
                reader = sqlCommand.ExecuteReader();

                //ARMAR ROLES
                while (reader.Read())
                {
                    roles.Add(this.getById(reader.GetInt32(reader.GetOrdinal("idRol"))));
                }

                sqlConnection.Close();
            }

            return(roles);
        }