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.

Post Cruzado con el blog http://geeks.ms/blogs/ajimenez

Anuncios

3 comentarios el “Truco: Distinct en LINQ

  1. Tal vez podrías haber simplificado las propiedades de clsSpeaker (ojo que las clases deben comenzar con mayúscula), de esta form:

    public string Nombre { get; set; }

    Además, hay una redundancia en:
    var Consulta = (from s in speaker()
    select s).Distinct();

    Puede ser escrito simplemente con:
    var Consulta = speaker().Distinct();

    (Ojo nuevamente con el casing. Las variables locales deberían ser en minúscula [“consulta”] y los métodos en mayúscula [“Speaker()”]).

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s