Linq to SQL重复排名

时间:2016-04-21 08:53:35

标签: c# entity-framework linq-to-entities

我正在尝试根据int分数构建排行榜。我正在拉出记录并计算排名如下:

//Base query
var query = UoW.Repository<UserProfile>().Get().OrderByDescending(u => u.Points);

//Fetch the data including a groupby count
var data = await query
        .Skip(skip)
        .Take(pageSize)
        .Select(u => new UserListItem
        {
             Points = u.Points.ToString(),
             Username = u.DisplayName,
             Rank = query.Count(o => o.Points > u.Points) + 1 //Calculates the rank (index)
        })
        .GroupBy(u => new { Total = query.Count() })
        .FirstOrDefaultAsync();

这样可以正常工作,除非我有2个或更多具有相同点的值,它复制了位置。无论关系如何,我都需要它不断增加。这是当前显示结果的方式:

排名|用户|点

  • 1 |用户1 | 456
  • 2 |用户2 | 420
  • 3 |用户3 | 402
  • 4 |用户4 | 380
  • 4 |用户5 | 380

知道我怎么能让它正确地自动递增?

1 个答案:

答案 0 :(得分:0)

解决方案是为Rank功能添加更多条件,以确定在得分相关时哪个首先出现。它甚至可以按用户名a-&gt;排名。如果你愿意,你可以。

可以在this SO answer找到答案,指出您使用多个条件的正确方向。