其实这两个笔记并没多大关系,放在一起只是为了凑字数。
先来说说这个分组查询分组查询的目的是为了将数据表中具有相同特征的数据查询出来放在一起,这个方法的思路与一般的Linq查询没太大差别只是多了一个“group by”语句,group在英语中的词义为组;团体;群的;团体的,而by的词义为通过;依据;在……之前,只是将数据查询后总得有个存放的地方,所以在这个语句中又有一个into,将查询出来的数据存入变量,具体怎么用见代码;
//语句描述:Linq使用group by分组按UserID用户ID查询出用户最高的成绩信息
//groupby分组语法:group tbAchievement by tbAchievement.UserID into tbStudent
//表示对tbAchievement按UserID字段进行分组,其结果命名为tbStudent
//一旦重新命名,tbAchievement的作用域就结束了,所以,最后select时,只能select tbStudent
var listAchievement = from tbAchievement inmyModels.PW_Achievement
group tbAchievement by tbAchievement.UserID into tbStudent
selectnew
{
UserID =tbStudent.Key,//key属性:返回进行分组的关键字段的值
AchievementID =tbStudent.OrderByDescending(m =>m.Achievement).FirstOrDefault().AchievementID,
// 利用Lambda表达式的FirstOrDefault方法将UserID相同数据中值最高的AchievementID筛选出来
Achievement =tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().Ach ievement,
ExamNumber =tbStudent.OrderByDescending(m => m.ExamNumber).FirstOrDefault().ExamNumber,
EligibleTypeID =tbStudent.OrderByDescending(m=>m.Achievement).FirstOrDefault().EligibleTypeID
};//这个分组查询是为了将UserID相同的数据中的Achievemet中最高的值筛选出来
List<AchievementVo> listResult = (from tbAchievement in listAchievement
join tbStudent in myModels.PW_StudentontbAchievement.UserID equals tbStudent.UserID
join tbClass in myModels.SYS_Class on tbStudent.ClassID equals tbClass.ClassID
join tbEligibleType inmyModels.SYS_EligibleType on tbAchievement.EligibleTypeID equals tbEligibleType.EligibleTypeID
orderbytbAchievement.Achievement descending
selectnewAchievementVo
{
StudentNumber = tbStudent.StudentNumber,//学号
StudentName = tbStudent.StudentName,//姓名
StudentSex = tbStudent.StudentSex,//性别
Class = tbClass.ClassName,//班级
ExamNumber = tbAchievement.ExamNumber,//考试次数
Achievement = tbAchievement.Achievement,//最优成绩
EligibleType =tbEligibleType.EligibleTypeName,//合格类型
AcademeID= tbStudent.AcademeID,
GradeID =tbStudent.GradeID,
ClassID =tbStudent.ClassID
}).ToList();
//再用ToList查询多表联查新建一张表用于返回数据
接下来是关于下拉框数据绑定的说明
这份代码与之前写过的那份“为下拉框拼接‘请选择’”很像,嗯……也不对,这就是在那份代码的基础上衍生的,在那份代码中有一个数据的查询,不知道有没有人看到,它的原理是上一级下拉框发生改变后导致下一级下拉框一起改变
代码如下:
///<summary>
///年级下拉框数据查询
///</summary>
///<paramname="AcademeID"></param>
///<returns></returns>
publicActionResult selectGrade(int AcademeID) {
List<SelectVo> listGrade = (from tbGrade in myModels.SYS_Grade
where tbGrade.AcademeID== AcademeID
selectnewSelectVo
{
id =tbGrade.GradeID,
text=tbGrade.GradeName
}).ToList();
//拼接选择项
listGrade = Common.Tools.SetSelectJson(listGrade);
return Json(listGrade,JsonRequestBehavior.AllowGet);
}
像这样的代码至少还有一个,这份代码只是比前一份的代码多一个查询,也不算多,只是更仔细了,在视图的用法也是一样的