根据某些条件从对象列表中获取排名

时间:2016-07-07 11:10:05

标签: c# asp.net-mvc linq sorting collections

我有包含totalScore作为一个属性的类对象列表。我想根据team的totalscore得到Team的等级。这是我称之为List data = new List();

因此数据包含具有总分属性的记分板类对象。 我需要团队级别取决于totalscore.Here是我尝试的代码,但它给出Rank = 1,2,2,3的结果,但我需要Rank = 1,2,2,4这样。

data.OrderByDescending(x => x.totalScore).GroupBy(x => x.totalScore)
    .SelectMany((g, i) => g.Select(e => new { data = e.Rank = i + 1 }))
    .ToList();

数据列表包含唯一的团队,但总得分可能相同,因此相同的总核心团队必须在一个等级中。请帮帮我!

2 个答案:

答案 0 :(得分:2)

如果您需要就地更新列表:

int i = 0;
decimal? prevValue = null;
foreach(var item in data.OrderByDescending(x => x.totalScore))
{
    item.Rank = prevValue == item.totalScore ? i : ++i;

    prevValue = item.totalScore;
}

答案 1 :(得分:0)

另一种表示法(我更喜欢可读性)但基本上与user3185569提供的答案相同。

var i = 1;
var results = (from d in data orderby d.totalScore descending select new { Obj = d, Rank = i++ } ).ToList();