2016-11-23 27 views
-1

Wenn ich eine Klasse, die unten wie das Modell aussieht, so dass es mehrere Integer-Eigenschaften Cand1Votes, Cand2Votes und Cand3Votes, die für jedes Election Objekt in der Ansicht in DescendingOrder angezeigt werden muss. Für eine bestimmte Wahl kann Cand1Votes zuerst sein, während Cand3Votes zweite und Cand2Votes dritte.Wie Eigenschaften bestellen innerhalb eines Objekts

Meine Lösung ist bisher, ein List<KeyValuePair<string, int?>> für jedes der Wahlobjekte zu erstellen, dann das an das ViewModel zu senden und dieses in der Ansicht zu verwenden.

Meine Lösung bisher arbeitet, aber ich bin auf der Suche nach einer Lösung, wobei ich dynamisch die Integer-Elemente innerhalb des Objekts bestellen können, ohne eine andere List<KeyValuePair<string, int?>> erstellen zu müssen.

Jede Hilfe wird geschätzt. Dies ermöglicht eine beliebige Anzahl von Kandidaten in Ihrer Wahl Klasse zu sein, und Sie

public class Election 
{ 
    public int Id { get; set; } 
    public int TotalVotes { get; set; } 
    public List<Candidate> Candidates { get; set; } 

    public void AddCandidate(Candidate c) 
    { 
     Candidates.Add(c); 
    } 

    public List<Candidates> SortCandidates() 
    { 
     return Candidates.OrderByDescending(k => k.NumVotes).ToList(); 
    } 
} 

public class Candidate 
{ 
    public string Name { get; set; } 
    public int NumVotes { get; set; }   
} 

:

Modell

public class Elections{ 
    public int Id   { get; set; } 
    public int? TotalVotes { get; set; } 
    public int? Cand1Votes { get; set; } 
    public string Cand2Name { get; set; } 
    public int? Cand2Votes { get; set; } 
    public string Cand2Name { get; set; } 
    public string Cand3Name { get; set; } 
    public int? Cand3Votes { get; set; } 
    public int? OtherVotes { get; set; } 
} 

public static List<KeyValuePair<string, int?>> OrderByVotes(Election election) 
{ 
    var votesArray = new List<KeyValuePair<string, int?>>() 
    { 
     new KeyValuePair<string, int?>(election.Cand1Name, election.Cand1Votes), 
     new KeyValuePair<string, int?>(election.Cand2Name, election.Cand2Votes), 
     new KeyValuePair<string, int?>(election.Cand3Name, election.Cand3Votes), 
     new KeyValuePair<string, int?>("Other Candidates", election.OtherVotes) 
    }; 
    var result = votesArray.OrderByDescending(k => k.Value); 
    return result.ToList(); 
} 
+1

Drive-by Downvoter, Pflege für einen Grund? – hello

+0

Ich würde erwarten, dass sich die Kandidaten in einer beobachtbaren Sammlung befinden und sie nicht als separate Variablen haben. Dann können Sie diese Sammlung als Sammlungsquelle für Ihre Ansicht festlegen und sie in der Ansicht sortieren, etwa so: http://stackoverflow.com/questions/14992072/how-do-you-sort-a-collectionviewsource-by -one-property-then-by-another-as-a-tie –

+0

Ich bin bereit zu wetten, dass dieses Modell eine Datenbanktabelle darstellt, aber korrigieren Sie mich, wenn ich falsch liege. Es wäre einfacher, den Rat von @AmittaiShapira zu nehmen, aber wenn das keine Option ist, was genau meinst du mit der Neuordnung innerhalb des Objekts? Möchten Sie, dass 'Cand1Name' und' Cand1Votes' den niedrigsten Votenamen/Wert enthalten, 'Cand2Name' und' Cand2Votes' den nächstniedrigeren Wert und so weiter? – Sam07

Antwort

2

denke ich, ein wenig Refactoring auf dem Modell einfacher, dies etwas machen kann die SortCandidates() -Methode für ein Election-Objekt aufrufen, um eine Liste der Kandidaten nach absteigenden NumVotes zu sortieren. Foreach durch diese Liste der Kandidaten Ihrer Ansicht, um die 1., 2., 3., usw. Platz Kandidaten in der Reihenfolge anzuzeigen.

Verwandte Themen