Problemas para fazer o crud em arquivo xml com c#

Oi tudo bem?

Estou com um problema para realizar as operações de crud com xml usando a linguagem c#.

Peguei num site da internet alguns códigos para realizar o crud, até aí tudo bem.

Codifiquei igual com o do site eu conseguia inserir, listar, mas quando eu pedi para excluir ele excluiu todo mundo menos o que eu tinha pedido, e quando eu fui ver, agora ele simplesmente não deixa nem inserir, fica mandando a mensagem “a sequencia não tem elementos”. O nome da exceção é InvallidOperationException. Eu simplesmente não estou entendendo nada.
Será que alguém pode me ajudar?
Isso é para um projeto da faculdade, é para entregar nessa sexta que vem.

Eu vou colocar aqui os códigos:
Código XML

   <alarmes>
  <alarme codigo="0" descricao="Acorde" dia="05" mes="03" horario="13" />  
</alarmes>

Códigos C#

   class RepositorioAlarme
    {
        

        public RepositorioAlarme() 
        {
            
            
        }

        

        public string verificarExistencia(int codigo)
        {
            string mensagem = "";
            XElement x = new XElement("alarme");
            XElement a = XElement.Load("Alarme.xml");
            x = a.Elements().Where(p => p.Attribute("codigo").Value.Equals(codigo.ToString())).First();
            foreach (XElement b in a.Elements())
            {
                if(x != null)
                {
                    mensagem = "Alarme já cadastrado.";
                }
            }
            return mensagem;
        }


        public  void CadastrarAlarme(Alarme alarme)
        {
            XElement x = new XElement("alarme");
            x.Add(new XAttribute("codigo",alarme.Codigo.ToString()));
            x.Add(new XAttribute("descricao", alarme.Descricao));
            x.Add(new XAttribute("dia", alarme.Dia));
            x.Add(new XAttribute("mes", alarme.Mes));
            x.Add(new XAttribute("horario", alarme.Horario));
            XElement xml = XElement.Load("Alarme.xml");
            xml.Add(x);
            xml.Save("Alarme.xml");
        }

        public  void AlterarAlarme(Alarme alarme)
        {
            
            XElement a = new XElement("alarme");
            XElement x = XElement.Load("Alarme.xml");
            XElement xml = x.Elements().Where(p=> p.Attribute("codigo").Value.Equals(alarme.Codigo.ToString())).First();
            if (xml != null)
            {
                xml.Attribute("descricao").SetValue(alarme.Descricao);
                xml.Attribute("dia").SetValue(alarme.Dia);
                xml.Attribute("mes").SetValue(alarme.Mes);
                xml.Attribute("horario").SetValue(alarme.Horario);
            }
            xml.Save("Alarme.xml");
        }

        public  void ExcluirAlarme(Alarme alarme)
        {
            XElement x = XElement.Load("Alarme.xml");
            XElement xml = x.Elements().Where(p => p.Attribute("codigo").Value.Equals(alarme.Codigo.ToString())).First();
            if (xml != null)
            {
                xml.Remove();
            }
            xml.Save("Alarme.xml");
        }

        public List<Alarme> listarAlarmes(string consulta, string campo)
        {
            List<Alarme> alarmes = new List<Alarme>();
            XElement xml = XElement.Load("Alarme.xml");
            Alarme alarme = null;
            if (consulta.Equals("todos") && campo.Equals("todos"))
            {
                foreach (XElement x in xml.Elements())
                {
                    alarme = new Alarme();
                    alarme.Codigo = int.Parse(x.Attribute("codigo").Value);
                    alarme.Descricao = x.Attribute("descricao").Value;
                    alarme.Dia = x.Attribute("dia").Value;
                    alarme.Mes = x.Attribute("mes").Value;
                    alarme.Horario = x.Attribute("horario").Value;
                    alarmes.Add(alarme);
                }
            }
            else
            {
                if (campo.Equals("codigo"))
                {
                    XElement x = xml.Elements().Where(p => p.Attribute("codigo").Value.Equals(consulta)).First();
                    if (x != null)
                    {
                        foreach (XElement a in xml.Elements())
                        {
                            alarme = new Alarme();
                            alarme.Codigo = int.Parse(a.Attribute("codigo").Value);
                            alarme.Descricao = a.Attribute("descricao").Value;
                            alarme.Dia = a.Attribute("dia").Value;
                            alarme.Mes = a.Attribute("mes").Value;
                            alarme.Horario = a.Attribute("horario").Value;
                            alarmes.Add(alarme);
                            break;
                        }
                    }
                    
                }
                else
                {
                    if (campo.Equals("descrição"))
                    {
                        XElement x = xml.Elements().Where(p => p.Attribute("descricao").Value.Equals(consulta)).First();
                        foreach (XElement a in xml.Elements())
                        {
                            alarme = new Alarme();
                            alarme.Codigo = int.Parse(a.Attribute("codigo").Value);
                            alarme.Descricao = a.Attribute("descricao").Value;
                            alarme.Dia = a.Attribute("dia").Value;
                            alarme.Mes = a.Attribute("mes").Value;
                            alarme.Horario = a.Attribute("horario").Value;
                            alarmes.Add(alarme);
                            break;
                        }
                    }
                    else
                    {
                        if (campo.Equals("dia"))
                        {
                            XElement x = xml.Elements().Where(p => p.Attribute("dia").Value.Equals(consulta)).First();
                            foreach (XElement a in xml.Elements())
                            {
                                alarme = new Alarme();
                                alarme.Codigo = int.Parse(a.Attribute("codigo").Value);
                                alarme.Descricao = a.Attribute("descricao").Value;
                                alarme.Dia = a.Attribute("dia").Value;
                                alarme.Mes = a.Attribute("mes").Value;
                                alarme.Horario = a.Attribute("horario").Value;
                                alarmes.Add(alarme);
                                break;
                            }
                        }
                        else
                        {
                            if (campo.Equals("diaMesHorario"))
                            {
                                XElement x = xml.Elements().Where(p => p.Attribute("dia").Value.Equals(consulta)).First();
                                XElement f = xml.Elements().Where(p => p.Attribute("mes").Value.Equals(consulta)).First();
                                XElement g = xml.Elements().Where(p => p.Attribute("horario").Value.Equals(consulta)).First();
                                if (x != null || f != null || g != null)
                                {
                                    foreach (XElement a in xml.Elements())
                                    {
                                        alarme = new Alarme();
                                        alarme.Codigo = int.Parse(a.Attribute("codigo").Value);
                                        alarme.Descricao = a.Attribute("descricao").Value;
                                        alarme.Dia = a.Attribute("dia").Value;
                                        alarme.Mes = a.Attribute("mes").Value;
                                        alarme.Horario = a.Attribute("horario").Value;
                                        alarmes.Add(alarme);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            
            
            return alarmes;
        }

        public Alarme pegarAlarme(int codigo)
        {
            Alarme alarme = null;
            XElement a = XElement.Load("Alarme.xml");

            XElement x = a.Elements().Where(p => p.Attribute("codigo").Value.Equals(codigo.ToString())).First();
            if (x != null)
            {
                alarme = new Alarme();
                alarme.Codigo = int.Parse(x.Attribute("codigo").Value);
                alarme.Descricao = x.Attribute("descricao").Value;
                alarme.Dia = x.Attribute("dia").Value;
                alarme.Mes = x.Attribute("mes").Value;
                alarme.Horario = x.Attribute("horario").Value;
            }
            return alarme;
        }
    }
}

Opa, marcoslogan, beleza?

Que tal se você lesse todos os elementos do seu arquivo .xml e colocá-los em uma IList?
A partir daí, você pode fazer operações de exclusão dessa lista.
Você lê todos os elementos, coloca em uma IList, remove o elemento que você quer, limpa o .xml atual e preenche com os novos dados.
Algo como:[code]XElement document = new XElement(“document.xml”);
IList elements = document.Elements().ToList();

XElement selected = elements
.Where(m => m.Attribute(“codigo”).Value.Equals(alarme.Codigo.ToString())
.FirstOrDefault();

elements.Remove(selected);
//preenche teu .xml novamente[/code]

Que tal?