Olá Amigos,
Tenho duas listas relacionadas (tópicos,respostas), preciso remover todas as respostas relacionadas a um determinado tópico.
O primeiro código que vem a cabeça é fazer um for each e deletar item por item.
Como no exemplo abaixo:
SPQuery q = new SPQuery();
q.Query = "<Where><Eq><FieldRef Name='Topico' /><Value Type='Lookup'>" + sTopico + "</Value></Eq></Where>";
SPList listRespostas = SPContext.Current.Web.Lists["Respostas"];
SPListItemCollection itensTopicos = listRespostas.GetItems(q);
foreach (SPListItem itemResposta in itensTopicosFake)
{
itemResposta.Delete();
}
Porém quando executamos este código, nos deparamos com o seguinte erro.
Collection was modified; enumeration operation may not execute
Este erro acontece porque a collection que eu estou usando no for each, está sendo modificada dentro dele mesmo.
Para resolver este problema substitui o for each pelo while abaixo.
while (itensTopicos.Count > 0)
itensTopicos[0].Delete();
Abraços,
Leonardo
6 comentários:
Opa dica valida, grato pela ajuda!
Valeu me ajudou também!!
Valeu!
Outro jeito de fazer isso seria criando um clone do objeto a ser varrido usando o .toList()...
Desta maneira:
foreach (SPListItem itemResposta in itensTopicosFake.toList())
{...}
Valeu!
vlw pela dica amigo, ajudou bastante.
Eduardo
Curitiba
Me ajudou também, fiz algo parecido:
-----------
int i = 0;
while (i < filaDeArquivosParaChecar.Count){
if (Posso apagar o registro na posicao i){
filaDeArquivosParaChecar.Remove(filaDeArquivosParaChecar.ElementAt(i));
//volto com o i para zero para voltar a olhar a fila do começo agora que um elemento foi apagado (no caso da minha aplicação a maior parte das vezes eh o primeiro elemento da fila mesmo, se não poderia ser algo do tipo i = i -1; para voltar uma posicao
i = 0;
}
else
{
i++;
}
}
Vlw me ajudou bastante tb...
Postar um comentário