Alex Jimenez

El éxito no se terminaría de lograr si no tienes la fe en tus cualidades y en DIOS para lograrlo
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.

Published 16/7/2009 16:55 por Alexander Jimenez

Archivado en: ,,,,
Comparte este post:

Comentarios

# re: Truco: Distinct en LINQ@ Friday, July 17, 2009 8:34 AM

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:

blogs.msdn.com/.../how-to-use-linq-methods-to-compare-objects-of-custom-types.aspx

Salu2 - Octavio

Octavio Hernández

# re: Truco: Distinct en LINQ@ Monday, July 20, 2009 1:53 PM

* Sonido de Respirador de Darth Vader *

Lo has hecho muy bien, mi joven Padawan...

Saludos,

Angel

Angel Hernández