2016-04-21 74 views
0

我试图根据int得分建立排行榜。我拉出来的记录和计算,像这样的排名:Linq to SQL重复排名

//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个或多个值具有相同点复制它的位置。无论关系如何,我都需要它不断增加。这是目前如何显示结果:

排名|用户| Points

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

任何想法如何让它自动增加正确?

回答

0

解决的办法是给Rank函数添加更多的条件,以确定哪些分数是绑定的第一个。如果你喜欢,它甚至可以通过用户名a-> z进行排名。

答案指向你在正确的方向使用多个标准可以在this SO answer找到。

+0

如果我希望重复只是按显示名称排序,那么怎么办?任何想法让查询来做到这一点? –