2009-10-24 35 views
30

Mam listę, że trzeba posortować według DateTime, klasa MyStuff wygląda następująco:sposób sortowania kolekcji przy DateTime w C#

public class MyStuff 
{ 
    public int Type {get;set;} 
    public int Key {get;set;} 
    public DateTime Created {get;set;} 
} 

muszę móc sortować listy kolekcji przez Utworzono (DateTime) pole.

+0

w celu prawidłowego formatu i podkreślenia sekcje kodu, trzeba podkreślić linie w edytorze i kliknij „kod” przycisk (010 101) na pasku narzędzi edytora, lub naciśnij Ctrl-K na klawiaturze –

Odpowiedz

6
var query = 
    from m in mystuffcollection 
    orderby m.Created ascending 
    select m; 
64

Wydaje się, że praca z List<T> obiektu, w którym to przypadku najbardziej efektywny (i proste) metodą byłoby następujące:

myList.Sort((x, y) => DateTime.Compare(x.Created, y.Created)); 

używa przeciążenie metody List.Sort niż przyjmuje delegata Comparison<T> (a zatem wyrażenie lambda).

Można oczywiście użyć metody LINQ OrderBy, ale nie sądzę, że ma to jakieś zalety i może być znacznie wolniejsze, w zależności od sytuacji.

myList = myList.OrderBy(x => x.Created).ToList(); 
+0

Nie martwię się tutaj o "wydajność". Chociaż rekwizyty nie wskazują LINQ/sort-potrzebne. –

+11

Kluczowa różnica między tymi dwiema metodami polega na tym, że 'List .Sort' sortuje istniejącą listę, podczas gdy' OrderBy' zwraca nową 'IEnumerable ' i pozostawia listę samą. Jest to korzystne, jeśli chcesz zachować oryginalną listę lub skuteczność, jeśli tego nie zrobisz. – stevemegson

+0

@stevemegson: To prawda. Jednak rodzaje w miejscu są zwykle bardziej powszechne. – Noldorin