时间:2021-07-01 10:21:17 帮助过:3人阅读
转化成viewModel (计算每个人员的排名)
1 List<UserRankingViewModel> list = new List<UserRankingViewModel>(); 2 for (int i = 0; i < nationalPaiming.Count; i++) 3 { 4 UserRankingViewModel model = new UserRankingViewModel(); 5 model.UserID = nationalPaiming[i].UserId; 6 model.TotalIntergal = nationalPaiming[i].totalScoure; 7 if (i == 0) //因为这里的循环的集合是按照总积分降序排列的,所以第一个排名一定是第一 8 { 9 model.Ranking = i + 1; 10 } 11 else 12 {
// 判断这个员工的总分是否和上一个员工的总积分相同 13 if (nationalPaiming[i].totalScoure == nationalPaiming[i - 1].totalScoure) 14 { 15 model.Ranking = list[i - 1].Ranking; //相同则排名相同 16 } 17 else 18 { 19 model.Ranking = list[i - 1].Ranking + 1; //不同则是上一位员工的下一名 20 } 21 } 22 list.Add(model); 23 }
3、在返回页面时循环集合1实体转换
1 List<int> nationalUserIds = nationalList.Select(e => e.UserID).ToList(); 2 int index = userIds.IndexOf(viewModel.UserId); 3 viewModel.NationalRanking = nationalList[index].Ranking;
注:仅个人思路及实现的笔记,不妥之处(或有更好的方法),请各位指正。
全国排名的问题(linq 的连表查询 等同于sql的left join)
标签: