2009-05-15 5 views
14

Wir haben eine generische Liste (des Produkts), die nach zwei oder mehr Eigenschaften der Produktklasse sortiert werden muss.Sortieren Generische Liste mit zwei oder mehr Werten

Die Produktklasse hat die Eigenschaften "Popular" numerisch (asc), "Clicked" numerisch (desc), "Name" string (asc). In der Reihenfolge der Benennung der Eigenschaften soll die Liste sortiert werden.

Wie kann es mit einer Lamba-Anweisung sortieren? Wenn Sie die Liste basierend auf einer Eigenschaft sortiert haben.

Antwort

3

Es tut mir leid, aber kennen Sie irgendwelche C#?

products.OrderBy(p => p.Popular). 
    ThenByDescending(p => p.Clicked). 
    ThenBy(p => p.Name); 

Können Sie bekommen, was Sie von diesem benötigen?

+0

brilliant! Ich wusste nichts über das "ThenBy" – BrokeMyLegBiking

30

EDIT Nur realisiert, dass dies eine VB-Frage war. Hier ist die VB.Net-Lösung

Dim list = GetSomeList() 
Dim sorted = list. _ 
    OrderBy(Function(x) x.Popular). _ 
    ThenBy(Function(x) x.Clicked). _ 
    ThenBy(Function(x) x.Name) 

C# Version. Versuchen Sie, die folgenden

var list = GetSomeList(); 
var sorted = list.OrderBy(x => x.Popular).ThenBy(x => x.Clicked).ThenBy(x => x.Name); 
5

Um Ihre Frage zu einem Lambda-Ausdruck zu beantworten, dass zu komplex ist, in einem Lambda-Ausdruck zu bringen, wie VB nicht mehrzeiligen Lambda-Ausdrücke unterstützt.

Für eine nicht-LINQ-Lösung:

Sie benötigen eine benannte Methode als Vergleich:

Private Function Comparer(ByVal x As Product, ByVal y As Product) As Integer 
    Dim result As Integer = x.Popular.CompareTo(y.Popular) 
    If result = 0 Then 
     result = x.Clicked.CompareTo(y.Clicked) 
     If result = 0 Then 
      result = x.Name.CompareTo(y.Name) 
     End If 
    End If 
    Return result 
End Function 

Verbrauch:

theList.Sort(AddressOf Comparer) 
+0

löste ein Problem, das ich hatte. Vielen Dank! – John

+0

@Guffa - VB unterstützt mehrzeilige Lambda-Ausdrücke. –

+0

@roryap: Ja, tut es jetzt. Nicht als die Antwort geschrieben wurde. – Guffa

2
List<Product> sortedProducts = null; 
sortedProducts = products.OrderBy(p => p.Popular) 
         .ThenByDescending(p => p.Clicked) 
         .ThenBy(p => p.Name) 
         .ToList(); 
Verwandte Themen