Sort List Por Varias Columnas

05/02/2007 - 23:10 por Jimmy Anhuaman | Informe spam
Estoy buscando la forma de como ordenar un Generic.List pero por varias
columnas. por ejemplo tengo definido una clase Cliente de la siguiente forma:

List<Factura> Elementos = new List<Factura>();

espero que alguien me pueda apoyar a Ordener algo como:
OrdenPago, FechaEmision desc, NroDocumento

Saludos
Jimmy Anhuaman
 

Leer las respuestas

#1 Octavio Hernandez
06/02/2007 - 00:56 | Informe spam
Jimmy,

Basta con que escribas una función de comparación adecuada
para pasársela al método Sort().
La función debe comparar dos Factura f1 y f2, y devolver -1
si f1 < f2, +1 si f1 > f2, o cero si son iguales.
Ahí te va un ejemplo:

using System;

using System.Collections.Generic;

namespace ConsoleApplication1

{

class Factura

{

public string Orden;

public DateTime FechaEmision;

public int NroDocumento;

// mas...

public Factura(string o, DateTime fe, int nro)

{

Orden = o;

FechaEmision = fe;

NroDocumento = nro;

}

public override string ToString()

{

return Orden + "/" + NroDocumento + " (" +
FechaEmision.ToString("dd/MM/yyyy") + ")";

}

}

class Program

{

// funcion de comparaci¢n

private static int Comparador(Factura f1, Factura f2)

{

// por fecha, orden y nro. doc

if (f1.FechaEmision < f2.FechaEmision) return -1;

else if (f1.FechaEmision > f2.FechaEmision) return +1;

else if (f1.Orden.CompareTo(f2.Orden) == -1) return -1;

else if (f1.Orden.CompareTo(f2.Orden) == +1) return +1;

else if (f1.NroDocumento < f2.NroDocumento) return -1;

else if (f1.NroDocumento > f2.NroDocumento) return + 1;

else return 0;

}

static void Main(string[] args)

{

List<Factura> elementos = new List<Factura>();

elementos.Add(new Factura("A74", new DateTime(2007, 01, 12), 1));

elementos.Add(new Factura("A53", new DateTime(2007, 01, 04), 2));

elementos.Add(new Factura("A21", new DateTime(2007, 01, 02), 1));

elementos.Add(new Factura("A46", new DateTime(2007, 01, 03), 1));

elementos.Add(new Factura("A53", new DateTime(2007, 01, 04), 1));

// ordenar

elementos.Sort(Comparador);

foreach (Factura f in elementos)

Console.WriteLine(f);

Console.ReadLine();

}

}

}

Slds - Octavio



"Jimmy Anhuaman" <Jimmy escribió en el
mensaje news:
Estoy buscando la forma de como ordenar un Generic.List pero por varias
columnas. por ejemplo tengo definido una clase Cliente de la siguiente
forma:

List<Factura> Elementos = new List<Factura>();

espero que alguien me pueda apoyar a Ordener algo como:
OrdenPago, FechaEmision desc, NroDocumento

Saludos
Jimmy Anhuaman

Preguntas similares