2016-04-21 73 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

如果我希望重複只是按顯示名稱排序,那麼怎麼辦?任何想法讓查詢來做到這一點? –