表格的查询和统计运算
一. 数据查询
1.要求:查出最高的成绩信息
语句描述:Linq使用group
by分组按UserID用户ID查询出用户最高的成绩信息,分组语法:group tbAchievement
by tbAchievement.UserID into tbStudent,表示tbAchievement按UserID字段进行分组,其结果命名为tbStudent。
通过降序方法获取第一个值,这个值就是我们需要的最大值。
var listAchievement = from tbAchievement in
myModels.PW_Achievement
group tbAchievement by tbAchievement.UserID into tbStudent
select new {
UserID = tbStudent.Key,//key属性:返回进行分组的关键字段的值
AchievementID = tbStudent.OrderByDescending(m =>
m.Achievement).FirstOrDefault().AchievementID,
Achievement =
tbStudent.OrderByDescending(m =>
m.Achievement).FirstOrDefault().Achievement,
ExamNumber =
tbStudent.OrderByDescending(m => m.ExamNumber).FirstOrDefault().ExamNumber,
EligibleTypeID =
tbStudent.OrderByDescending(m =>
m.Achievement).FirstOrDefault().EligibleTypeID
};
2.运用多表联查方法查询出最优成绩,最多的考试次数,学号等信息放入new出来的新的实体类AchievementVo里
二.数据的筛选
1.首先实例化,AchievementStatisticsVo里是我们要计算的总人数,平均值,各分数段的比例&人数等字段。
AchievementStatisticsVo
listStatistics = new AchievementStatisticsVo();
2.运用三目运算计算总人数
int totalRow = listResult.Count()==0?1:listResult.Count();
listStatistics.TotalNumber= totalRow;
3.计算所有学生成绩总和
float sumAchievement =(float)listResult.Sum(m=> m.Achievement);
3.计算平均分(总成绩/总人数)
listStatistics.AverageScore= sumAchievement / totalRow;
4.计算合格人数和合格比例(合格人数/总人数)
listStatistics.PassNumber= listResult.Count(m => m.Achievement >= 60);
listStatistics.PassNumberP= (float)listStatistics.PassNumber / totalRow * 100;
5.计算不合格人数和不合格比例
listStatistics.PassFail= listResult.Count(m => m.Achievement < 60);
listStatistics.PassFailP= (float)listStatistics.PassFail / totalRow * 100;
6.计算100人数和比例
listStatistics.Score100= listResult.Count(m => m.Achievement == 100);
listStatistics.Score100P= (float)listStatistics.Score100 / totalRow * 100;
7.计算90`99人数和比例
listStatistics.Score9099= listResult.Count(m => m.Achievement >= 90 && m.Achievement <100);
listStatistics.Score9099P= (float)listStatistics.Score9099 / totalRow * 100;
- 计算80`89人数和比例
listStatistics.Score8089=
listResult.Count(m => m.Achievement >= 80 && m.Achievement <90);
listStatistics.Score8089P= (float)listStatistics.Score8089 / totalRow * 100;
以次往下推,最后返回listStatistics数据去页面