【发布时间】:2020-06-19 02:17:06
【问题描述】:
我有以下列表,其中包含名称和分数列表。我使用 linq 获得的分数总和:
Name Score
Ed 5
John 6
Sara 7
Dean 3
Nora 4
所以我能够对列表进行分组并得出总和,但现在我正在尝试根据分数对这些列表进行排名。所以我想得到下面的列表:
Rank Name Score
1 Sara 7
2 John 6
3 Ed 5
4 Nora 4
5 Dean 3
但我正在使用的 linq 代码似乎并没有为我获得正确的排名。
这是我制作列表、计算总和和排名的代码:
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;
}
我只是想知道如何在 linq 中包含正确的排名。
【问题讨论】:
标签: c# linq observablecollection