Ну, самый легкий путь состоял бы в том, чтобы сделать это в стороне клиента, а не стороне базы данных, и использовать перегрузку Выбора, который обеспечивает индекс также:
public List<ScoreWithRank> GetHighScoresWithRank(string gameId, int count)
{
Guid guid = new Guid(gameId);
using (PPGEntities entities = new PPGEntities())
{
var query = from s in entities.Scores
where s.Game.Id == guid
orderby s.PlayerScore descending
select new
{
PlayerName = s.PlayerName,
PlayerScore = s.PlayerScore
};
return query.AsEnumerable() // Client-side from here on
.Select((player, index) => new ScoreWithRank()
{
PlayerName = player.PlayerName,
PlayerScore = player.PlayerScore,
Rank = index + 1;
})
.ToList();
}
}
Там достойная и бесплатная электронная книга под названием " PHP 5 Power Programming " (~ 5 MiB PDF), которую я бы порекомендовал. В нем рассматриваются более сложные аспекты ООП в PHP и объясняются некоторые общие шаблоны проектирования.
Если вы еще не были там, документация php.net довольно хороша. Здесь - это раздел, посвященный объектам PHP5. Также есть раздел о переходе с PHP4 на PHP5 .