LINQ TO SQL ——Group by
分组在SQL中应用的十分普遍,在查询,统计时都有可能会用到它。LINQ TO SQL中同样具备group的功能,这篇我来讲下LINQ TO SQL中关于group的用法。
说明:
1:group 不一定要用到多表查询中,单表查询也是可以的。
2:基本语法:
1>:group 分组后要取的字段或者是对象;
2>:by 分组对象,可以是一列也可以是多列;
3>:into 结果集对象。
3:group的分类,这里分为单列分组,和多列分组。
第一:单列分组:及group by 后面跟一个具体的列名。
我们以客户表和客户消费表来说明group的用法,年末了,一般都是对帐的时候,对于管理员来说,非常希望知识自己的会员在这一年内的消费总额。为此可以 这样写LINQ TO SQL来实现:以下例来说,group 后面的就是分组后要用到的消费金额字段:Price,by后面的是按什么分组,上面是按年份分组,into后面的结果集对象(salesByYear), 即分组后的结果会保存到它里面,之前的c,p的作用域到此为此,后面就只能用salesByYear了。
最后呈现两个内容,一个是年份,一个是所有客户消费的金额总和。
对应的SQL:
单列分组的特点:
1:分组后的结果集salesByYear,它有一个特点,就是包含一个Key的属性,它对应group 语法中的by 关键字后面的内容,即按什么分组。
2:要想实现SQL中的having功能也特别简单,中需要在group语句完成后,加上相应的where 条件即可。例如:where salesByYear.Sum()>1000
3:可以方便的实现对分组后数据的排序:例如在上面的where 条件后加上如下语句:orderby salesByYear.Key descending
4:如果是通过计算过的字段要加上一个别名,例如:TotalPrice= salesByYear.Sum(),如果直接写salesByYear.Sum()是不行的。
第二:多列的分组:就是group by 后面跟一个匿名对象。
例如:从06年到08年,这三年内,所有用户的消费金额,要显示的内容包含用户名,年份,消费金额。
最终效果图:和SQL一样,要想在最终的结果集中显示某些字段,那么需要把要显示的字段放进group by 的字段中,所有我们可以通过Year=salesByYear.Key.Year这样来取年份。
代码片断如下:
多列分组中,需要注意以下几个方面:
1:group语法中的by 后面并不是跟具体的列名, 而是通过一个匿名对象来分组;
2:多列分组时,结果集salesByYear的Key属性并不是一列值,而是参与分组所有对象的值构成的数组;可以通过salesByYear.Name等等形式呈现;
3:如果group 后面跟的是具体的列名,如group p.Price,最后的选择列时可以这样写:TotalPrice= salesByYear.Sum();如果后面跟的是对象名,即group p by,最后的选择列时只能这样写:TotalPrice= salesByYear.Sum(p=>p.Price),因为此时的salesByYear的内容是一个对象,并不是单一列。
4:可以根据salesByYear的Key来取分组字段,Year=salesByYear.Key.Year,而不能这样写Year=salesByYear.Key;
总结: 上面是些比较觉见的LINQ TO SQL中关于group的用法,对拉姆达表达式特别喜欢的朋友,可以用拉姆达表达式来实现。无论是单列分组还是多列,其实本质上和传统SQL的分组原理是一样的,因为LINQ TO SQL最终会翻译成SQL语句来执行。
LINQ TO SQL ——Group by的更多相关文章
- C# Linq to SQL — Group by
需求是需要统计数据库中表某一列的总数量,同时以List的形式返回到UI层. Linq to SQL中的Group by用法如下: IList<Unit.HandleCountClass> ...
- Linq to SQL -- Group By、Having和Exists、In、Any、All、Contains
Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in ...
- LINQ系列:LINQ to SQL Group by/Having分组
1. 简单形式 var expr = from p in context.Products group p by p.CategoryID into g select g; foreach (var ...
- linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)
Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in ...
- C# Linq to sql 实现 group by 统计多字段 返回多字段
Linq to sql 使用group by 统计多个字段,然后返回多个字段的值,话不多说,直接上例子: where u.fy_no == fy_no orderby u.we_no group u ...
- linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)
http://wenku.baidu.com/link?url=2RsCun4Mum1SLbh-LHYZpTmGFMiEukrWAoJGKGpkiHKHeafJcx2y-HVttNMb1BqJpNdw ...
- LinQ to SQL 及 non-LinQ方式实现Group的Performance对比
拥有476550数据的一张数据表.使用其中的某个字段分组,然后按该字段进行排序.该需求分别使用LinQ to SQL和non-LinQ的方式实现,然后来看一下performance对比. LinQ w ...
- LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
我们继续讲解LINQ to SQL语句,这篇我们来讨论Group By/Having操作符和Exists/In/Any/All/Contains操作符. Group By/Having操作符 适用场景 ...
- [转]linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)
本文转自:http://www.cnblogs.com/jack-liang/archive/2011/03/22/1991554.html Group By/Having操作符 适用场景:分组数据, ...
随机推荐
- nRF905 - 系列示意图
一个.截图 备份文件:sch20110521.7z 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- DDD领域驱动设计初探
DDD领域驱动设计初探1 前言:又有差不多半个月没写点什么了,感觉这样很对不起自己似的.今天看到一篇博文里面写道:越是忙人越有时间写博客.呵呵,似乎有点道理,博主为了证明自己也是忙人,这不就来学习下D ...
- 关于 pthread_cond_wait 和 pthread_cond_signal , signal 无效的问题
关于一个消费者模式,,,引起的问题.. 我在io线程里不断的把一个函数调用放到队列里 然后ruby线程就不断的从这个队列里取出函数之争并运行. 典型的 消费者模式. 我曾经以为是这样... 这是wor ...
- 【 Android官方文件读书笔记】连接网络
一间连接应用网络的主要功能.Android系统对网络连接进行了封装,使得开发人员可以更快的给应用添加网络功能.大多数网络连接的Android应用使用HTTP发送和接受数据.Android包含两个HTT ...
- 创意HTML5文字特效 类似翻页的效果
原文:创意HTML5文字特效 类似翻页的效果 之前在网上看到一款比较有新意的HTML5文字特效,文字效果是当鼠标滑过是出现翻开折叠的效果,类似书本翻页.于是我兴致勃勃的点开源码看了一下,发现其实实现也 ...
- android浏览器开发小技巧集锦(转)
本人和朋友们做了一段时间浏览器,将一些小技巧分享出来,先写一部分,慢慢写,同时也为我们的浏览器打打广告 我们的浏览器将要上线,名叫沙发浏览 1.网页内的右键菜单 public boolean onLo ...
- CocoaPods停在Analyzing dependencies解决方案
现在很多开源项目应用cocoapod.这使集成第三方库都非常方便,在没有花project里设置哪些参数.仗着. 只要运行pod update要么pod install时间,经常会卡在Analyzing ...
- 第13章 模版方法模式(Template Method)
原文 第13章 模版方法模式(Template Method) 模板模式 模板模式 举例:模拟下数据库的update方法,先删除在插入. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- HDU4828 Grids 2014百度之星预赛问题解决
看看Catalan数的公式:为 Catalan(n) = C(2n, n) / n+1 = C(2n, n) - C(2n, n-1); (公式0) 然后利用全排序表达:Catalan(n) = (2 ...
- 计数排序(C语言版本)
让我们来谈谈数的排序思维: 计数排序假定待排序的全部元素都是介于0到K之间的整数.计数排序使用一个额外的数组countArray.当中第i个元素是待排序数组array中值等于i的元素的个数.然后依据数 ...