这是我目前所拥有的代码,只是当学生得分相同时,他们会得到不同的等级而不是我想要的
class Program
{
static void Main(string[] args)
{
using (var db = new SchoolEntities())
{
int rank= 0;
var query = db.ScoreSummaries
.OrderByDescending(x => x.TotalScore).ToList();
foreach (var item in query)
{
rank+= 1;
Console.WriteLine("{0},{1},{2}", item.TransactionID, item.TotalScore, rank);
}
Console.WriteLine("Pls press any key to exit");
Console.ReadKey();
}
}
我的结果如下,请注意前两个记录是相同但有不同的等级。我希望两个记录的排名为1,下一个排名为3.任何建议都将受到赞赏
TRANS01,92,1
TRANS01,92,2
TRANS01,88,3
TRANS01,85,4
TRANS01,79,5
Pls press any key to exit
答案 0 :(得分:3)
尝试这样的事情
int rank= 0;
int lastScore = 0;
var query = db.ScoreSummaries
.OrderByDescending(x => x.TotalScore).ToList();
foreach (var item in query)
{
if (lastScore > item.TotalScore)
rank++;
lastScore = item.TotalScore;
Console.WriteLine("{0},{1},{2}", item.TransactionID, item.TotalScore, rank);
}
答案 1 :(得分:0)
我会这样做的方式。将当前分数保存到新变量
static void Main(string[] args)
{
using (var
db = new SchoolEntities())
{
double currentScore = 0;
int rank= 0;
int savedRank;
var query = db.ScoreSummaries
.OrderByDescending(x => x.TotalScore).ToList();
foreach (var item in query)
{
rank+= 1;
if(item.TotalScore == current score)
{
savedRank = savedRank
}
else
{
savedrank = rank;
}
Console.WriteLine("{0},{1},{2}", item.TransactionID, item.TotalScore, savedrank);
currentScore = item.totalScore;
}
Console.WriteLine("Pls press any key to exit");
Console.ReadKey();
}
}
答案 2 :(得分:0)
我会假设这是某个班级的作业。
您正在尝试跟踪学生的当前排名,以及您经历过的学生总数。为此,您需要在自己的变量中跟踪每个变量,并在适当的时间修改它们。
您经历过的学生人数每次都会增加,就像您目前的排名变量一样; current_rank变量需要与其分开递增(可能基于之前学生的成绩,提示,提示)。