Panowie @Ciekawski oraz @dam1en, autor pytał o sortowanie danych, nie o ich trzymanie w bazie. ;)
@zidu89, kompletnie nie kumam powyższego kodu. Co on właściwie robi? Mógłbyś jakieś diagramy UML do niego zamieścić?
@shao, wydaje mi się, że jeśli chcemy porównać numery faktur, to należy porównać numery faktur, a nie jakieś tam stringi.
Dlatego potrzebujemy klasy, która nam ten numer opisze:
class InvoiceNumber
{
public int Year { get; private set; }
public int Number { get; private set; }
public string Code { get; private set; }
private string numberAsText;
public InvoiceNumber(string numberAsText)
{
this.numberAsText = numberAsText;
string[] temp = numberAsText.Split('/');
this.Number = int.Parse(temp[0]);
this.Year = int.Parse(temp[1]);
this.Code = temp[0];
}
public override string ToString()
{
return this.numberAsText;
}
}
Jak rozumiem numer faktury składa się z roku, kolejnego numeru w roku oraz jakiegoś literowego kodu. Sparsowanie tego jest banalne, wystarczy funkcją Split
podzielić stringa na trzy części, a potem je odpowiednio skonwertować do liczb (dla roku i numeru).
Samo sortowanie najwygodniej chyba zrealizować przez OrderBy
z LINQ, np. tak:
var input = new[] {"1189/2012/RK", "2/2013/RK", "3/2013/RK", "1188/2012/RK", "1/2013/RK"};
var invoiceNumbers = new List<InvoiceNumber>();
foreach (var ś in input)
{
invoiceNumbers.Add(new InvoiceNumber(ś));
}
var sorted = invoiceNumbers.OrderBy(ó => ó.Year).ThenBy(ź => ź.Number);
foreach (var ó in sorted)
{
Console.WriteLine(ó);
}