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

    xiaoxiao2023-10-24  180

    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(); } 我所需要查询的结果已经出来了,如图所示:

    最新回复(0)