lunes, 27 de junio de 2011

Linq y el Metodo Distinct con IEqualityComparer

En este ejemplo no estoy usando tipos anónimos, ya que previamente definí mi clase a ocupar con Linq.

Lo primero es importar la libreria de Reflection.

using System.Reflection;

Lo siguiente es crear una clase que implemente la interface de IEqualityComparer, esta clase se usa sobre un listado del tipo de dato a utilizar

public class OCDiferentes : IEqualityComparer<OCxItem>
{
public bool Equals(OCxItem x, OCxItem y)
{
if (x == null || y == null) //optional
return false;
else
return
x.ID == y.ID;
}

public int GetHashCode(OCxItem Item)
{
return Item.ID.GetHashCode();
}
}
Dentro de esta clase tenemos el método Equals donde se compararan los valores que queremos que sean únicos. Ahora la implementación.
ListadoResultante = (ListadoOrigen
.Where(d => (d.Y- d.X) > 0) //Filtro
.Select(d => new OCxItem
{
PId = (string)d.PId,
Nombre = d.Nombre,
ID = d.ID,
Fecha = d.Fecha,
}).Distinct(new OCDiferentes())
.OrderBy(d => d.ID)).ToList(); //Ordenamiento

Dentro del llamado al metodo Distinct creamos una clase para que compare, del tipo que habíamos definido previamente “OCDiferentes


También incluyo un Where y un Order by para que se entienda como se utilizarían esas otras instrucciones.


Por ultimo tamvien estoy usando la instruccion ToList(), para que cree el listado del tipo que se define en el Select que es “OCxItem


Nota: Listado ListadoResultante y ListadoOrigen son del tipo List<OCxItem>

No hay comentarios:

Publicar un comentario