LINQ学习(六):OrderBy/Group By子句
测试数据:
class Student{public string Name { get; set; }public int Score { get; set; }}List<Student> students = new List<Student>{new Student {Name="Terry", Score=50}, new Student {Name="Tom", Score=85},new Student {Name="Wade", Score=90},new Student {Name="James", Score=70},new Student {Name="Kobe", Score=90},new Student {Name="AK", Score=90}, };
1.OrderBy
说明:在查询表达式中,orderby子句可对集合按升序(ascending)或降序(descending)排序(默认的是升序)。可以指定多个排序的值,以便执行一个或多个次要排序操作。
对分数进行降序排序,然后再将分数相同的学生姓名进行升序排列(分数为主要排序,姓名为次要排序):
var query = from student in studentsorderby student.Score descending, student.Nameselect student;foreach (var student in query){Console.WriteLine("{0}:{1}", student.Name, student.Score);//AK:90//Kobe:90//Wade:90//Tom:85//James:70//Terry:50}
2.Group By
(1)说明:group子句返回一个 IGrouping<TKey, TElement> 对象序列,这些对象包含零个或更多个与该组的键值匹配的项。 例如,可以按照每个字符串中的第一个字母对字符串序列进行分组。 在这种情况下,第一个字母是键且具有 char 类型,并且存储在每个 IGrouping<TKey, TElement> 对象的Key属性中。
按照学生分数分组:
var query = from student in studentsgroup student by student.Score;foreach (var studentGroup in query){//studentGroup推断为IGrouping<int,Student>类型Console.WriteLine("{0}", studentGroup.Key);//50//85//90//70}
(2)说明:由于 group 查询产生的 IGrouping<TKey, TElement> 对象实质上是列表的列表,因此必须使用嵌套的 foreach 循环来访问每一组中的各个项。 外部循环用于循环访问组键,内部循环用于循环访问组本身中的每个项。组可能具有键,但没有元素。如果您想要对每个组执行附加查询操作,则可以使用 into 上下文关键字指定一个临时标识符。 使用 into 时,必须继续编写该查询,并最终用一个 select 语句或另一个 group 子句结束该查询。
查询每个分数组中的每个学生的信息:
var query = from student in studentsgroup student by student.Score into gselect g;foreach (var studentGroup in query){Console.WriteLine("分数组:{0}", studentGroup.Key);foreach (var student in studentGroup){Console.Write("{0}:{1},", student.Name,student.Score);}Console.WriteLine();//分组:50//Terry:50,//分组:85//Tom:85,//分组:90//Wade:90,Kobe:90,AK:90,//分组:70//James:70,}
(3)同样的,group 子句可按照任何类型进行分组,如字符串、内置数值类型、用户定义的命名类型或匿名类型。形式差不多,有需要可查阅其他资料
出处: http://www.cnblogs.com/ForEvErNoME/
欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐 或 关注
转载于:https://www.cnblogs.com/ForEvErNoME/archive/2012/07/26/2608424.html
LINQ学习(六):OrderBy/Group By子句相关推荐
- Linq 学习笔记(二)
Linq 学习笔记(二) 下面就来介绍一些查询的示例: 1.Linq查询 var racers = from r in Formula1.GetChampions() where r.Wins > ...
- 一起谈.NET技术,Linq学习笔记
写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...
- Linq学习——查询表达式
.查询表达式关键字 关键字 功能 from 指定要查找的数据源以及范围变量,多个from子句则表示从多个数据源查找数据 select 指定查询要返回的目标数据,可以指定任何类型,甚至是匿名 ...
- [转]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操作符 适用场景:分组数据, ...
- linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)
Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q =from p in ...
- MySql学习(六) —— 数据库优化理论(二) —— 查询优化技术
目录 一.子查询优化 二.视图重写 三.等价谓词重写 四.条件化简(条件优化技术) 1.条件下推 2.条件化简 五.外连接消除.嵌套连接消除.连接消除 六.数据库的约束规则与语义优化 七.非SPJ优化 ...
- SQL基础学习总结:5(HAVING子句的使用ORDER BY排序子句的使用)
为聚合结果指定条件 HAVING子句 HAVING子句可以让我们筛选分组之后的各种数据,其语法结构如下: SELECT <列名1>,<列名2>,<列名3> FROM ...
- Apollo代码学习(六)—模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码
Apollo代码学习(六)-模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码
- 艾伟:C#多线程学习(六) 互斥对象
本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习( ...
最新文章
- delete后加 limit是个好习惯么 !
- LNMP_ 配置文件
- Windows命令计算MD5与SHA1/256值
- 10到十分精彩的智力题,你能过关几道?
- React Native之hardwareBackPress
- Python+OpenCV4:读写输入和输出的简单实践(图片、视频、摄像头)
- jmeter的如何设置headers
- Github代码安全监控
- 2019JAVA面试题精粹附答案
- 百度SEO全自动百度挂机循环提交工具(MIP 主动推送)泛目录专用
- 《让大象飞》阅读心得
- 音频格式简介和PCM转换成WAV
- JavaWeb过滤器(Filter)
- 顾往前行,我的前端之路系列(二)
- 财商教育—百万富翁的生活习惯
- Cesium实现雷达扫描效果
- android差分升级原理,BigNews Android 增量更新框架差分包升级 @codeKK c开源站
- 第一范式转化为第二范式_管理学发展的范式转换及其哲学基础
- 工程师不可不知:解决EMI之传导干扰的八大对策
- 缅怀我的第一台平板——Surface RT