Ordenar Datos Usando Linq

sábado, 30 de junio de 2012

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

Diseño

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.
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);
}

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.
var arr = from n in nums orderby n ascending select n;
foreach (var n in arr)
{
lbxarreglo.Items.Add(n);
}

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 descendentemente(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.
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;
}

}

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.
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(" ");
}

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.
var lis = from l in personas orderby l.Edad descending select l;
foreach(var pers in lis)
{
lbxpersonas.Items.Add(pers);
lbxpersonas.Items.Add(" ");
}

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.

Desordenados

Ordenados


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 y como siempre les dejo los proyectos para descargar.

Descargar Proyecto C#

Descargar Proyecto VB.Net

0 comentarios:

Publicar un comentario en la entrada

Nota: solo los miembros de este blog pueden publicar comentarios.