Truco: Distinct en LINQ

Este truco es mas que todo para aclarar la duda que surgió en al finalizar el WebCast que por cuestiones de tiempo no logre responderle, además que no esta mal saber como usarlo.

Con esta Clausula podemos restringir la visualización de los datos repetidos en una consulta.

El Siguiente Truco esta orientado a LINQ to SQL (C# – ASP.net)

//establezco mi DataContex
dcNorthwindDataContext db = newdcNorthwindDataContext();
//Defino mi consulta
var Consulta = (from t indb.Territories
               select t).Distinct();
//Muestro el resultado en un GridView
gvLINQtoSQL1.DataSource = Consulta.ToList();
gvLINQtoSQL1.DataBind();

El Siguiente Truco esta orientado a LINQ to Objects (C# – ASP.net)

Clase:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace DemoLINQCSharp
{
    public class clsSpeaker
    {
        private string m_sNombre;
        private string m_sApellido;
        private string m_sTema;
        private int m_iDuracionMinutos;

        public string Nombre
        {
            get
            {
                return m_sNombre;
            }
            set
            {
                m_sNombre = value;
            }
        }

        public string Apellido
        {
            get
            {
                return m_sApellido;
            }
            set
            {
                m_sApellido = value;
            }
        }

        public string Tema
        {
            get
            {
                return m_sTema;
            }
            set
            {
                m_sTema = value;
            }
        }

        public int DuracionMinutos
        {
            get
            {
                return m_iDuracionMinutos;
            }
            set
            {
                m_iDuracionMinutos = value;
            }
        }
    }
}

 

En el Formulario Web:

Defino el metodo que llena los datos a partir de la clase mencionada anteriormente.

public List<clsSpeaker> speaker()
      {
          List<clsSpeaker> listaSpeaker = new List<clsSpeaker> 
          { 
              new clsSpeaker{Nombre="Alexander", Apellido="Jimenez", DuracionMinutos=60, Tema="LINQ con C#"},
              new clsSpeaker{Nombre="Manuel", Apellido="Mendez", DuracionMinutos=45, Tema="SilverLight"},
              new clsSpeaker{Nombre="Oscar", Apellido="Berroteran", DuracionMinutos=60, Tema="LINQ con VB"},
              new clsSpeaker{Nombre="David", Apellido="Delgado", DuracionMinutos=90, Tema="Comunidades"},
              new clsSpeaker{Nombre="Rafael", Apellido="Linares", DuracionMinutos=45, Tema="SQL Server 2008"},
              new clsSpeaker{Nombre="Sara", Apellido="Linares", DuracionMinutos=60, Tema="Comunidades"}
          };
          return listaSpeaker;
      }

 

Lleno en GridView de mi pagina web a traves de la invocacion de un LinkButton:

 

protected void lnkLINQtoObjects1_Click(object sender, EventArgs e)
{
    var Consulta = (from s in speaker()
                   select s).Distinct();
    gvLINQtoObjects1.DataSource = Consulta.ToList();
    gvLINQtoObjects1.DataBind();
}

Espero que le sea de ayuda.

Publicado por

Alex Jimenez

Soy amante a la tecnología, dedicado al desarrollo de aplicaciones Web ReactJS, WCF, MVC, WebApi y antiguo MVP en ASP .net 2009-2012

2 comentarios sobre “Truco: Distinct en LINQ”

  1. Hola, Alexander!

    Quería puntualizar que al utilizar Distinct() de esa forma, se estarán comparando las referencias a los objetos Speaker para decidir si dos objetos son iguales o no. Esto puede no ser lo que nos interese en un momento dado.

    Este artículo de MSDN muestra cómo definir un criterio de igualdad propio para comparar los objetos:

    http://blogs.msdn.com/csharpfaq/archive/2009/03/25/how-to-use-linq-methods-to-compare-objects-of-custom-types.aspx

    Salu2 – Octavio

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *