Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Comparar itens da lista

Olá, tudo bem ?

Tenho uma situação em uma aplicação que estou dando manutenção, onde um item está sendo adicionado em duplicidade em uma lista.

Como faço para verificar e impedir que esse item seja adicionado na lista?

Conseguem me ajudar?

public class Resumo
            {
                public int Id { get; set; }
                public int IdEmpresa { get; set; }
                public int IdUsuario { get; set; }
                public int Referencia { get; set; }

                public decimal ValorCPG { get; set; }

                public int ContaContabil { get; set; }
                public decimal ValorCTB { get; set; }
                public decimal Diferenca { get; set; }

                public bool Conferido { get; set; }
                public bool Diferencas { get; set; }
                public string Explicacao { get; set; }
                public bool Existe { get; set; }
            }

Abaixo os dados coletados do banco são lidos e após adicionado na lista.

while (dataReader.Read())
                        {
                            ConciliacaoContabil.Fornecedores.Resumo _tipo = new ConciliacaoContabil.Fornecedores.Resumo();

                            ...

                            lista.Add(_tipo);
                        }

Grato.

2 respostas
solução!

Eai Mauricio, beleza?

O que exatamente você não quer que duplique? você precisa de uma referência de comparação.

Como os dados estão vindo da base de dados, acredito que comparar por ID seja o suficiente, a não ser que a sua referência que você esta dizendo que ta duplicado, esteja também na base de dados. Nesse caso, você deve fazer essa verificação antes de salvar.

Ok então, seguindo o seu código você precisa percorrer sua lista item por item verificando se está duplicado.

Vou dar um exemplo em que eu não quero que minha lista possua nenhuma dessas duas propriedades duplicadas Referencia e Explicacao.

usando foreach

           bool itemDuplicado = false;
            foreach (var item in lista)
            {
                if(item.Referencia == _tipo.Referencia || item.Explicacao == _tipo.Explicacao)
                {
                //se dentro da lista existir um item com PELO MENOS um dos itens iguais, ele ja marca como item duplicado
                    itemDuplicado = true;
                }
            }

             if (!itemDuplicado)
             {
                lista.Add(_tipo);
             }

usando Linq

            if (!lista.Any(item => item.Referencia == _tipo.Referencia || item.Explicacao == _tipo.Explicacao))
            {
                lista.Add(_tipo);
            }

os dois exemplos tem o mesmo resultado, ambos percorrem a lista inteira fazendo a verificacao da condicao que eu mandei fazer.

Qualquer duvida pode perguntar, espero ter ajudado.

Marcos, beleza e você?

Primeirao muito obrigado pela colaboração!!!

Com sua ajuda sumiu da lista, so preciso ajustar para não somar na outra lista, vou analisar aqui.

Grato!