2009-05-28 9 views
1
Sortierung

Lassen Sie uns sagen, dass wir ein Unternehmen haben, die Attribute Att1 und att2 hat, wo att1 haben Werte a, b, c und att2 können 1,2,3 Werte haben. Ist es möglich, LINQ zu verwenden, sodass wir Elemente in der Auflistung sortieren können, indem Sie eine beliebige Sortierregel anwenden, ohne IComparable zu implementieren. Ich stehe vor einem Problem, wenn das Geschäft erfordert, dass auf einigen Bildschirmen Elemente in der Sammlung in einer Weise und in anderen Bildschirmen in anderer Weise sortiert werden. Zum Beispiel kann die Regel angeben, dass Elemente sortiert werden müssen, so dass "b" zuerst aufgeführt wird, dann "a", dann "c" und innerhalb jeder Gruppe "3" zuerst, dann "1" und dann "2".Verwenden LINQ für beliebige

Antwort

6

Sicher. Sie können OrderBy mit einem Prädikat verwenden, das mehr oder weniger jede beliebige Art von "Sortierreihenfolge" zurückgibt. Zum Beispiel:

objectsWithAttributes.OrderBy(x => 
{ 
    // implement your "rules" here -- anything goes as long as you return 
    // something that implements IComparable in the end. this code will sort 
    // the enumerable in the order 'a', 'c', 'b' 

    if (x.Attribute== 'a') 
     return 0; 
    else if (x.Attribute== 'c') 
     return 1; 
    else if (x.Attribute== 'b') 
     return 2; 
}).ThenBy(x => 
{ 
    // implement another rule here? 
}); 
Verwandte Themen