在 Firebase 实时数据库中按分数对用户排序
Order users by score in Firebase realtime database
我试图按最高分对用户进行排序以创建排行榜,但是,当尝试按分数对他们进行排序时,我得到的是用户按字母顺序排序。
这是数据库结构的图像:database
这是我获取有序用户列表的尝试:
List<User> list = new List<User>();
list = (await firebase.Child("Users").OrderBy("HighScore").LimitToLast(10).OnceAsync<User>()).Select(item => new User
{
Username = item.Object.Username,
Password = item.Object.Password,
HighScore = item.Object.HighScore
}).ToList();
这里是查询的结果 ref/Users/.json?orderBy="HighScore"&limitToLast=10:
{"a":{"HighScore":500,"密码":"a","用户名":"a"},"ac":{"HighScore":0,"密码":" ac","用户名":"ac"},"b":{"HighScore":1100,"密码":"b","用户名":"b"}}
这里是数据库规则:rules
我做错了什么?
事实证明,我的查询 return 得分最高的 10 个用户。但出于某种原因,我的代码给出的列表是根据用户名而不是分数字段按字母顺序排列的。所以我所做的就是在获得 10 个最佳用户的列表后对列表进行排序 List<User> orderedList = list.OrderByDescending(o => o.HighScore).ToList();
现在它似乎按照我预期的方式工作。
我试图按最高分对用户进行排序以创建排行榜,但是,当尝试按分数对他们进行排序时,我得到的是用户按字母顺序排序。
这是数据库结构的图像:database
这是我获取有序用户列表的尝试:
List<User> list = new List<User>();
list = (await firebase.Child("Users").OrderBy("HighScore").LimitToLast(10).OnceAsync<User>()).Select(item => new User
{
Username = item.Object.Username,
Password = item.Object.Password,
HighScore = item.Object.HighScore
}).ToList();
这里是查询的结果 ref/Users/.json?orderBy="HighScore"&limitToLast=10:
{"a":{"HighScore":500,"密码":"a","用户名":"a"},"ac":{"HighScore":0,"密码":" ac","用户名":"ac"},"b":{"HighScore":1100,"密码":"b","用户名":"b"}}
这里是数据库规则:rules
我做错了什么?
事实证明,我的查询 return 得分最高的 10 个用户。但出于某种原因,我的代码给出的列表是根据用户名而不是分数字段按字母顺序排列的。所以我所做的就是在获得 10 个最佳用户的列表后对列表进行排序 List<User> orderedList = list.OrderByDescending(o => o.HighScore).ToList();
现在它似乎按照我预期的方式工作。