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>Dentro de esta clase tenemos el método Equals donde se compararan los valores que queremos que sean únicos. Ahora la implementación.
{
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();
}
}
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>