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操作符 适用场景:分组数据, ...
随机推荐
- Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 解读
http://codeforces.com/contest/426/problem/B 对称标题的意思大概是.应当指出的,当线数为奇数时,答案是线路本身的数 #include<iostream& ...
- 选择一个利于SEO的空间
大家好.今天蜗牛将给大家分享怎么选择一个利于SEO的站点空间. 一.什么是站点空间? 站点空间,是用来存你的站点的HTML,.图片.文件等的一个远程硬盘空间(就像你的电脑里面的空间一回事儿).依据不同 ...
- PHP接口和抽象类的区别
原文引自: http://blog.csdn.net/sunlylorn/article/details/6124319 一. 抽象类abstract class 1 .抽象类是指在 class 前加 ...
- java观察者模式(转)
简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新. 不多说 ...
- MOCK.JS 生成随机数据,拦截 Ajax 请求
mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...
- 运营商网络採用SDN所面临的挑战(一)
运营商网络採用SDN所面临的挑战(一) Babak Samimi 将数据平面.控制平面与管理平面分隔开来所实现的软件定义网络(SDN)改善了OPEX及CAPEX,而且使得网络资源的集中调配和管理成为可 ...
- hdu 5066 Harry And Physical Teacher(Bestcoder Round #14)
Harry And Physical Teacher Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- 你也可以玩转Skype -- 基于Skype API开发外壳程序入门
原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...
- Git@OSC & SSH配置
#### [ 导入外部Git仓库到中国源代码托管平台(Git@OSC)] 免费代码托管 您可以通过SSH或者HTTP的方式提交和管理代码,也可以通过Web的方式在线阅读,编辑代码与Team@OSC的集 ...
- Cracking Microservices practices
微服务最佳实践 英文原文:Cracking Microservices practices 在我还不知道什么叫微服务架构的时候我就使用过它.以前,我写了一些管道程序(pipeline applicat ...