Linq中GroupBy方法的使用总结-创新互联
Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均值等。
成都创新互联是一家专注于网站制作、成都网站制作与策划设计,夹江网站建设哪家好?成都创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:夹江等地区。夹江做网站价格咨询:18982081108Linq中的Groupby方法也有这种功能。具体实现看代码:
假设有如下的一个数据集:
- publicclass
- publicintsetget
- publicstringsetget
- publicstringsetget
- publicintsetget
- publicstringsetget
- new
- new"张三""第一学期""Math"
- new"张三""第一学期""Chinese"
- new"张三""第一学期""English"
- new"李四""第一学期""Math"
- new"李四""第一学期""Chinese"
- new"李四""第一学期""English"
- new"王五""第一学期""Math"
- new"王五""第一学期""Chinese"
- new"王五""第一学期""English"
- new"赵六""第一学期""Math"
- new"赵六""第一学期""Chinese"
- new"赵六""第一学期""English"
- new"张三""第二学期""Math"
- new"张三""第二学期""Chinese"
- new"张三""第二学期""English"
- new"李四""第二学期""Math"
- new"李四""第二学期""Chinese"
- new"李四""第二学期""English"
- new"王五""第二学期""Math"
- new"王五""第二学期""Chinese"
- new"王五""第二学期""English"
- new"赵六""第二学期""Math"
- new"赵六""第二学期""Chinese"
- new"赵六""第二学期""English"
可以把这个数据集想象成数据库中的一个二维表格。
示例一
通常我们会把分组后得到的数据放到匿名对象中,因为分组后的数据的列不一定和原始二维表格的一致。当然要按照原有数据的格式存放也是可以的,只需select的时候采用相应的类型即可。
第一种写法很简单,只是根据下面分组。
- //分组,根据姓名,统计Sum的分数,统计结果放在匿名对象中。两种写法。
- //第一种写法
- "---------第一种写法"
- in
- new
- foreachin
- "{0}:总分{1}"
- //第二种写法
- "---------第二种写法"
- new
- foreachin
- "{0}:总分{1}"
示例二
当分组的字段是多个的时候,通常把这多个字段合并成一个匿名对象,然后group by这个匿名对象。
注意:groupby后将数据放到grouped这个变量中,grouped 其实是IGrouping
orderby多个字段的时候,在SQL中是用逗号分割多个字段,在Linq中就直接多写几个orderby。
- //分组,根据2个条件学期和课程,统计各科均分,统计结果放在匿名对象中。两种写法。
- "---------第一种写法"
- in
- new
- new
- foreachin
- "学期:{0},课程{1},均分{2}"
- "---------第二种写法"
- new
- new
- foreachin
- "学期:{0},课程{1},均分{2}"
示例三
Linq中没有SQL中的Having语句,因此是采用where语句对Group后的结果过滤。
附件:http://down.51cto.com/data/2362114
- //分组,带有Having的查询,查询均分>80的学生
- "---------第一种写法"
- in
- new
- new
- foreachin
- "姓名:{0},学期{1},均分{2}"
- "---------第二种写法"
- //此写法看起来较为复杂,第一个Groupby,由于是要对多个字段分组的,因此构建一个匿名对象,
- 对这个匿名对象分组,分组得到的其实是一个IEnumberable
>这样一个类型。 - Where方法接受,和返回的都同样是IEnumberable
>类型, - 其中Where方法签名Func委托的类型也就成了Func
,bool>, - 之前说到,IGrouping
继承了IEnumerable , - 因此这种类型可以有Average,Sum等方法。
- new
- new
- foreachin
- "姓名:{0},学期{1},均分{2}"
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻标题:Linq中GroupBy方法的使用总结-创新互联
文章分享:http://ybzwz.com/article/dhgghh.html