2009-08-20 8 views
0

Ich habe 3 Stufen für eine PlanSolution 1,2,3 und i müssen zunächst durch .levelId sortieren, und dann alphabetisch sortieren die Lösungen zu dieser Ebene gehören, durch .NAMEC# mehrere Sortieranlagen

PlanSolution[] planSolutions = wsAccess.GetPlanSolutionsForPlanRisk(planRisk.Id); 
        List<PlanRisk> planSolutionsList = new List<PlanRisk>(planSolutions); 


        planSolutionsList.Sort(delegate(PlanSolution x, PlanSolution y) 
        { 
         //HELP lol 
        }); 
+1

Sie brauchen keine 'Liste ' nur erstellen zu tun zu sortieren. Verwenden Sie einfach die 'Array.Sort()' Methode sowie eine der Delegierten in den vielen Lösungen. Linq ist möglicherweise zu groß, wenn Ihr Array groß ist, da Sie möglicherweise eine Kopie davon erstellen müssen, wenn Sie es als Array oder Liste (über 'ToList()' oder 'ToArray()') behalten möchten. –

Antwort

6

LINQ to die Rettung!

planSolutionsList = planSolutions 
    .OrderBy(x => x.id) 
    .ThenBy(x => x.Name) 
    .ToList(); // is this necessary? 

Für das Originalformat - Sie wollen einfach nur Ihre comparer ID über Namen für einen sprach acnostic Ansatz

planSolutionsList.Sort((x, y) => 
{ 
    //HELP lol 
    if (x.id != y.id) return x.id - y.id; 
    else return x.Name.CompareTo(y.Name); 
}); 
0

zu priorisieren: jedes tun, um.

1) Sortieren auf der Ebene. 2) Merken Sie sich die Startpositionen jeder Ebene nach dem Sortieren 3) Wiederholen Sie für die nächste Sortierkriterium, nur die Unterabschnitte sortiert.

1

könnten Sie Linq verwenden

planSolutionsList.OrderBy(x => x.Level).ThenBy(x => x.Name).ToList(); 
0
planSolutionsList.Sort(delegate(PlanSolution x, PlanSolution y) { 
    if (x.Level == x.Level) {   // same level, compare by name 
     return x.Name.CompareTo(y.Name); 
    } else {        // different level, compare by level 
     return x.Level.CompareTo(y.Level); 
    } 
    });