Inquiridor
Procurar item de um List<> em outro List<> mesma Classe

Pergunta
-
Fala Galera
Tenho uma classe de eventos com vários campos
E dois List<Eventos> eventos e List<Eventos> eventos2 por exemplos.
Cada um preencher um gridview sendo que um é de entrada de dados ou seja quando o cara clicar em salvar os dados digitados estaram em memoria.
Antes de concluir a tarefa precido verificar se o cod evento de um list consta no outro para editar o campo Status
Pensei em fazer dois foreach e compara os campos
Existe uma maneira melhor de se fazer isso??
Abraço
Todas as Respostas
-
-
-
foreach (var e1 in eventos) { if (eventos2.Find(x => x.Codigo == e1.Codigo) != null) { // Faz o que precisa, o evento } }
Se Find for null não tem o evento e1 na list evento2, se não for null tem.
"Codigo" é o nome do atributo para sua ID, podedia ser x.ID e e1.ID...No caso acima supus isso:
class Evento() { private Codigo{ get; set; } //outros atributos... }
- Editado Marcos Gerene segunda-feira, 24 de agosto de 2015 00:10
-
Se você quiser verificar a existência de um evento "T" em sua lista de eventos "List<T>", você pode utilizar o método Except de "List<T>".
Ele produz a diferença de dois "List<T>" utilizando o comparador padrão EqualityComparer<T>.Default
var resultado = evento2.Except(evento);
Como no seu caso é necessário fazer a comparação especificando valores, como por exemplo a propriedade Id de sua classe Evento, você pode utilizar a interface IEqualityComparer<T> e criar seu próprio comparador.
Por exemplo, para criar um comparador de Evento utilizando a propriedade Id de sua classe:Evento:
public class Evento { public int Id { get; set; } public string Nome { get; set; } }
Comparador:
class EventoComparer : IEqualityComparer<Evento> { public bool Equals(Evento e1, Evento e2) { return e1.Id == e2.Id; // <- faz a comparação utilizando sua lógica e retorna um valor verdadeiro ou falso } public int GetHashCode(Evento evt) { if (evt == null) return 0; int hash = 101; hash = (hash * 701) ^ evt.Id.GetHashCode(); // <- faz o cálculo de sua lógica de hash return hash; } }
Utilização:
var result = evento2.Except(evento, new EventoComparer());
Na classe EventoComparer você tem dois métodos, Equals e GetHashCode.
O primeiro método é utilizado para fazer a comparação utilizando sua própria lógica.
O segundo método calcula um HashCode. Se o HashCode dos dois items não forem iguais eles não serão considerados iguais e o método Equals nunca será chamado.
Se você compara mais de uma propriedade é interessante que você combine elas como no código de exemplo:
public int GetHashCode(Evento evt) { if (evt == null) return 0; int hash = 101; hash = (hash * 701) ^ evt.Id.GetHashCode(); hash = (hash * 701) ^ evt.Nome.GetHashCode(); return hash; }
ROBERTOSLJUNIOR
- Sugerido como Resposta robertosljunior segunda-feira, 24 de agosto de 2015 01:20
- Não Sugerido como Resposta robertosljunior quinta-feira, 27 de agosto de 2015 02:59
- Sugerido como Resposta robertosljunior quinta-feira, 27 de agosto de 2015 02:59
-
-