Linq的group by分组查询方法

作者:坚定的守猴

撰写日期:2019年5月26日

开发软件和关键技术:VS;Linq的group by分组查询

在之前文章介绍过,讲述Linq处理了单表数据的增删查改,而现在介绍它的group by分组查询有哪些独特的地方,我们先来了解一下这种方法思路。

Linq的group
by 分组查询,主要处理类似统计方面的数据。一件事物,随着各种情况的发生而会出现不同的结果。Group by查询方法就是针对于这些数据进行分组处理。这样解释可能会有点说不清,下面我们来通过一个考生成绩统计的例子来解释一下这方法的使用。

在大学里面的考试,与初高中的不一样。有部分的科目可以多次考测,其中获取最高分的那一次。对于这种情况的数据,我们得考虑到,学生与成绩是一对多的关系,怎样在这么多考试的次数查询出最高分的那一次呢?将每个学生的考试次数,成绩高低有顺序的查询出来。通过上面简单的分析了一下,我们就有了查询的方向了。

Linq的group by分组查询方法_第1张图片

这是数据库里面的成绩表,从表中可以知道,一个学生有多次考试记录,成绩也有高低的排列。但是在页面那边的要求就是要把这最高的成绩查询出来。所以我们得把这些同属一个学生成绩和考试的次数的数据归为一组,进行成绩倒序的排序,正常来说一般数据都是按照从小到大的顺序进行排列,如果把成绩倒序排序的话,最高成绩的那条数据就排在第一位了,到时候我们就取第一条数据就可以查询出来学生的最高成绩了。
这是采用group by分组查询的基本思路。下面我们来看一下代码

Linq的group by分组查询方法_第2张图片

在上面的数据库的成绩表知道,学生与成绩一对多的关系。所以将多次成绩分为一组的依据就是UseID,确定了分组的依据之后,开始先对成绩的查询,就像上面提到的思路,把这用户的成绩进行倒序排序,取分组里的第一条的数据。下面的考试次数,合格类型都采用相似的做法。不过考试次数就特别一点,从逻辑上来说,现在最高成绩是从学生多次考试里面去筛选的,仅仅是通过最高成绩去计算考试的总次数是不够准确的。因此就按照实际情况,考了多少次就统计多少次。

根据上面已经分组好的数据,下面我们就来进行联表查询,让下面的数据按照上面分组的规范进行查询。
Linq的group by分组查询方法_第3张图片

之后的就是多表查询的代码。对查询出来的数据进行筛选,然后就计算数据的总条数,提取里面的查询出来表格的数据,最后就将数据实例化。
Linq的group by分组查询方法_第4张图片

我们到页面看一下表格数据的如何排列

Linq的group by分组查询方法_第5张图片

按照学生进行分组,把考试次数和最优成绩进行倒序的排序,与刚开始从数据库的成绩表相比,这样从表格看上去数据井然有序,一目了然。

以上就是Linq group by的分组查询方法的思路和代码了。

你可能感兴趣的:(Linq的group by分组查询方法)