Autor Tema: (Pequeño Aporte)Ordenar Datos Usando Linq  (Leído 1165 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristiantorres

  • Trade Count: (0)
  • Sv Jr.
  • **
  • Thank You
  • -Given: 0
  • -Receive: 12
  • Mensajes: 76
  • Bendiciones para todos
    • Blog dedicado a la programacion
(Pequeño Aporte)Ordenar Datos Usando Linq
« : julio 08, 2012, 10:42:42 am »
Ahora veremos como hacer una de las cosas que hacemos muy a menudo como es la ordenación de datos usando linq.

Veremos como es de fácil con linq hacer estos procesos, ya que cuando se trabaja con arreglos o colecciones datos y nos toca ordenar los datos casi siempre recurrimos a los diferentes métodos de ordenación(burbuja) que existen pues bien como ya se los dije ahora veremos como hacerlo usando linq.

El ejercicio esta desarrollado en c# y vb.net con visual estudio 2010.

Este sera el diseño de nuestro ejercicio 2 botones y 2 listbox, en el ejercicio veremos como ordenar los datos de un arreglo y los datos de una lista tipo clase.


Veamos el código, primeramente veremos la manera de ordenar los datos del arreglo en este caso uso un arreglo de 20 posiciones y es llenado con datos aleatorios.
Código: [Seleccionar]
int[] nums = new int[20];
Random rnd = new Random();
 
for (int i = 0; i < nums.Length; i++)
{
  int alea = rnd.Next(0, 100);
  nums[i] = alea;
  lbxarreglo.Items.Add(alea);
}
Código: [Seleccionar]
Dim nums As Integer() = New Integer(19) {}
Dim rnd As New Random()
 
For i = 0 To 19
   Dim alea As Integer = rnd.Next(0, 100)
   nums(i) = alea
   lbxarreglo.Items.Add(alea)
Next

Como pueden observar el código es sencillo creamos un arreglo de 20 posiciones y luego lo llenamos con datos aleatorios usando la clase random y los mostramos en el listbox.

Ahora veamos como ordenar los datos usando linq.
Código: [Seleccionar]
var arr = from n in nums orderby n ascending select n;
foreach (var n in arr)
{
  lbxarreglo.Items.Add(n);
}
Código: [Seleccionar]
Dim arr = From n In nums Order By n Ascending Select n
For Each n In arr
    lbxarreglo.Items.Add(n)
Next
Como pueden notar en la primera linea se hace uso de linq para ordenar los datos del arreglo ascendentemente(de menor a mayor) también se puede ordenar descenntedemente(de mayor a menor)la sintaxis es sencilla y comprensiva muy parecida al sql, luego de ordenar los datos hacemos uso de un foreach para recorrer los datos y mostrarlos en el listbox.

Ahora veamos como ordenar los datos de una lista tipo clase usando linq.

Lo primero sera crear una clase.
Código: [Seleccionar]
public class Personas
{
  public string Nombre { get; set; }
  public string Apellido { get; set; }
  public int Edad { get; set; }
 
  public Personas(string nom, string ape, int edad)
  {
     Nombre = nom;
     Apellido = ape;
     Edad = edad;
  }
 
}
Código: [Seleccionar]
Class Persona
   Public Nombre As String
   Public Apellido As String
   Public Edad As Integer
   Public Sub New(ByVal nom As String, ByVal ape As String, ByVal ed As Integer)
         Nombre = nom
         Apellido = ape
         Edad = ed
   End Sub
End Class
Ahora creemos una lista tipo personas y agreguemos algunos datos desordenados.
Código: [Seleccionar]
List<personas> personas = new List<personas>();
 
personas.Add(new Personas("Cristian", "Torres", 20));
personas.Add(new Personas("Jose", "Alfaro", 18));
personas.Add(new Personas("Briseyda", "Flores", 12));
personas.Add(new Personas("Diana", "Turcios", 17));
personas.Add(new Personas("Fatima", "Ayala", 50));
personas.Add(new Personas("Miguel", "Fernadez", 40));
personas.Add(new Personas("Pedro", "Perez", 11));
personas.Add(new Personas("Nicole", "Garcia", 20));
foreach(Personas pers in personas)
{
 lbxpersonas.Items.Add(pers);
 lbxpersonas.Items.Add(" ");
}
Código: [Seleccionar]
Public personas As New List(Of Persona)()
 
personas.Add(New Persona("Cristian", "Torres", 20))
personas.Add(New Persona("Jose", "Alfaro", 18))
personas.Add(New Persona("Briseyda", "Flores", 12))
personas.Add(New Persona("Diana", "Turcios", 17))
personas.Add(New Persona("Fatima", "Ayala", 50))
personas.Add(New Persona("Miguel", "Fernadez", 40))
personas.Add(New Persona("Pedro", "Perez", 11))
personas.Add(New Persona("Nicole", "Garcia", 20))
For Each pers In personas
  lbxpersonas.Items.Add(pers)
  lbxpersonas.Items.Add(" ")
Next

Ahora veamos como ordenar los registros por medio de la edad.
Código: [Seleccionar]
var lis = from l in personas orderby l.Edad descending select l;
foreach(var pers in lis)
{
   lbxpersonas.Items.Add(pers);
   lbxpersonas.Items.Add(" ");
}
Código: [Seleccionar]
Dim lis = From l In personas Order By l.Edad Descending Select l
For Each pers In lis
   bxpersonas.Items.Add(pers)
   lbxpersonas.Items.Add(" ")
Next
Nuevamente primero se ordenan los datos por medio de la edad y esta vez los ordenamos de forma descendente usando linq, y luego se hace uso de foreach para recorrer los datos y mostrarlos en el listbox.




Como pueden notar ordenar datos usando linq es muy fácil y se consigue con poco código, ya no necesitamos recurrir a ningún método de ordenación ya que con linq lo puedes hacer fácil y rápido.

Eso es todo por ahora espero les sirva de algo hasta pronto.

Pueden descargar los proyectos desde mi blog Blog Cristian Torres
Visita mi Blog C#, Asp.Net, Python y mas...
http://cristiantorresalfaro.blogspot.com
http://codemania.tk