Linq语句group by分组语法Ladama表达式

LINQ(Language Integrated Query)是C#和VB.NET中的统一查询语法,用于保存和检索不同来源的数据。它集成在C#或VB中,从而消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。
例如,SQL是一种结构化查询语言,用于保存和检索数据库中的数据。同样的,LINQ是一个用C#和VB.NET构建的结构化查询语法,用于保存和检索来自不同类型数据源的数据,如对象集合,SQL服务器数据库,XML,Web服务等。
LINQ总是与对象一起工作,因此您可以使用相同的基本编码模式来查询和转换XML文档,SQL数据库,ADO.NET数据集,.NET集合以及LINQ提供程序可用的任何其他格式的数据。以上是我在“Hi-Sunshine”的博客里面看到的,对于初学的我来说,受益不浅。
我用Linq语法和group by分组语法写了一段,不足之处还望大家指出:

语句描述:Linq使用group by分组按UserID用户ID查询出用户最高的成绩信息
group by分组语法:group tbAchievement by tbAchievement.UserID into tbStudent
表示对tbAchievement按UserID字段进行分组,其结果命名为tbStudent
一旦重新命名,tbAchievement的作用域就结束了,所以,最后select时,只能select 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
};
List listResult = (from tbAchievement in listAchievement
join tbStudent in myModels.PW_Student on tbAchievement.UserID equals tbStudent.UserID
join tbClass in myModels.SYS_Class on tbStudent.ClassID equals tbClass.ClassID
join tbEligibleType in myModels.SYS_EligibleType on tbAchievement.EligibleTypeID
equals tbEligibleType.EligibleTypeID
orderby tbAchievement.Achievement descending
select new AchievementVo
{
StudentNumber = tbStudent.StudentNumber,//学号
StudentName = tbStudent.StudentName,//姓名
StudentSex = tbStudent.StudentSex,//性别
Class = tbClass.ClassName,//班级
Achievement = tbAchievement.Achievement,//最优成绩
EligibleType = tbEligibleType.EligibleTypeName,//合格类型
AcademeID = tbStudent.AcademeID,
GradeID = tbStudent.GradeID,
ClassID = tbStudent.ClassID
}).ToList();
在最后用Ladama表达式筛选一下,就这样,我所要查询的就查出来了。
if (AcademeID > 0)
{
listResult = listResult.Where(m => m.AcademeID == AcademeID).ToList();
}
if (GradeID > 0)
{
listResult = listResult.Where(m => m.GradeID == GradeID).ToList();
}
if (ClassID > 0)
{
listResult = listResult.Where(m => m.ClassID == ClassID).ToList();
}
我所需要查询的结果已经出来了,如图所示:
在这里插入图片描述


版权声明:本文为weixin_44569910原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。