2016-06-29 7 views
1

Nehmen wir an, wir haben ein einfaches Modell wie dieses, wobei eine Spalte "Monat" als eine aus drei Buchstaben bestehende Zeichenfolge ist.Gibt es eine einfache LINQ-Methode zum Sortieren einer Liste nach Monat?

public class SampleModel 
{    
    public int ID { get; set; } 
    public string Column1 { get; set; } 
    public string Month { get; set; } 
    public string Column2 { get; set; } 
} 

Wenn wir dieses Modell von Monat, eine LINQ-Anweisung wie

query.OrderBy (m => m.Month)

produzieren würde die folgende alphabetische Sortierung sortieren wollten weil Month eine Zeichenfolge ist.

Gibt es eine einfache Möglichkeit, Month chronologisch zu sortieren?

Sample table

+2

Dies ist ein fantastischer Grund, keine Daten als unvollständige Token-Datumszeichenfolge zu speichern. –

+0

Außer, dass dies das ist, was mir gegeben wurde und mit dem ich arbeiten soll. Die Realität übertrifft jedes Mal Ideale. –

Antwort

4

Sie es für diese Angelegenheit durch die Speicherung der Daten in einem Lookup-Tabelle/Wörterbuch oder eine Enumeration tun könnten. Dies funktioniert, vorausgesetzt, Sie verwenden LINQ to Objects, keine LINQ auf Basis von Fancy Expression.

Dictionary<string, int> months = new Dictionary<string, int>(); 
months.Add("Jan", 0); 
// and so on 

query.OrderBy(m => months[m.Month]); 

Diese Lösung funktioniert gut für andere Arten von Daten, nicht nur Monate.

+0

Dies ist ein interessanter Ansatz. Wenn ich also eine chronologische Sequenz erstellen möchte, die in einem anderen Monat als Januar (z. B. August) beginnt, könnte ich von August bis Juli auf diese Weise sortieren? –

+0

@Rubix_Revenge Sie könnten es steuern, wie auch immer Sie wollen. –

+0

Dies als die Antwort zu markieren, weil es vielseitig ist. –

3

Sie können die Month Teil zu DateTime analysieren und dann OrderBy wie verwenden:

var orderedCollection = list.OrderBy(r => 
        DateTime.ParseExact(r.Month, "MMM", CultureInfo.InvariantCulture)); 

Mit wie diese Parsen, dem Tag, Jahr Teil zu aktuellen Datum ausgewählt werden. Obwohl dies für Ihre Art irrelevant ist

+0

Sehr einfach in Fällen, wo ich ab Januar eine chronologische Sortierung durchführen möchte. +1 –

Verwandte Themen