Ich habe die folgende Liste, die aus einer Liste von Namen und Noten bestehen. Die Partituren I verwendet Linq bekam die Summe der Punkte für die Liste des peope zu bekommen:Linq Liste Ranking in C#
Name Score
Ed 5
John 6
Sara 7
Dean 3
Nora 4
So war ich die Liste Gruppe in der Lage und die Summen, aber jetzt versuche ich, diese auf der Grundlage des Rang Ergebnis. So versuche ich, die Liste unten zu bekommen:
Rank Name Score
1 Sara 7
2 John 6
3 Ed 5
4 Nora 4
5 Dean 3
Aber der Linq-Code Ich verwende scheint nicht für mich immer die richtigen Reihen zu werden.
Hier ist mein Code, um die Liste für die Herstellung und die Summen machen und Ranking:
public class Person
{
public int Rank { get; set; }
public string Name { get; private set; }
public int Score { get; set; }
public Person(int rank, string name, int score)
{
Rank = rank;
Name = name;
Score = score;
}
}
public ObservableCollection<Person> Persons { get; set; }
public MainWindow()
{
Persons = new ObservableCollection<Person>();
var data = lines.Select(line => {
var column = line.Split(',');
var name = column[0];
int score = int.Parse(column[1]);
int rank =0;
return new { name, score, rank };
});
var groupedData = data.OrderByDescending(x => x.score).GroupBy(p => p.name).Select((g, i) => new { name = g.Key, rank=i+1, score = g.Sum(p => p.score)});
var persons = groupedData.Select(p => new Person(p.rank, p.name, p.score));
foreach (var person in persons) {
Persons.Add(person);
}
datagrid.ItemsSource = Persons;
}
Ich würde nur gerne wissen, wie richtig Reihen in Linq aufzunehmen.
Grüße, Dank für Ihre Antwort danken. Ich habe Ihre vorgeschlagene Lösung versucht, aber ich bekomme immer noch nicht die richtige Rangordnung: S –
Der Rang ist in der Listenposition kodiert, ich werde die Antwort aktualisieren, um es in 'Person.Rank' zu liefern – Haukinger
Perfekt! Jetzt muss ich herausfinden, wie man das Ranking für diejenigen, die die gleiche Punktzahl haben, korrigiert. Vielen Dank :) –