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

本文介绍了如何利用C#的Linq查询和group by分组语法查询用户最高的成绩信息。通过示例代码展示了从数据库中获取并转换数据的过程,以及如何使用Ladama表达式进一步筛选查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}
我所需要查询的结果已经出来了,如图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值