2016-04-21 2 views
0

Я пытаюсь построить таблицу лидеров на основе оценки int. Я потянув записи, и вычисления ранга, как так:Linq to SQL duplicate rank

//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

Любая идея, как я могу получить его для автоматического приращения правильно?

ответ

0

Решение состоит в том, чтобы добавить дополнительные условия в функцию Rank, чтобы определить, что происходит первым, когда очки привязаны. Это может даже быть ранжирование по имени пользователя a-> z, если хотите.

Ответы, чтобы указать вам правильное направление для использования нескольких критериев, можно найти в this SO answer.

+0

О том, хочу ли я, чтобы дубликаты просто были заказаны по заказу по отображаемому имени. Любая идея получить запрос для этого? –