在C#中,自从有了Linq查询表达式后,程序员对可被迭代的序列或列表执行一系列的筛选、排序、过滤、分组、查询等操作。本文章所要讲述的是group关键字。

Linq查询表达式,是以from关键字开头,以select或group关键字结尾,它们之中可以插入where、orderby、join、let甚至附加的from子句。

group子句返回的是一个IGrouping<TKey,TElement>对象序列,请注意,是对象序列,而不是单个对象。由于group查询产生的IGrouping<TKey,TElement>实质上是列表的列表。因此必须使用嵌套的foreach循环来访问每一组的各个子项。外部循环可以访问每个组的Key,内部循环可以访问每个组的子项。

每个组的Key可以是任何类型,如字符串、用户自定义的对象或其他。

可以用如下代码来对序列进行分组:

//不排序的直接分组
var cityGroup = from city in cities
group city by city.Name;
//通过每组的Key排序的分组
var cityGroup = from city in cities
//先通过每个城市的名称来分组,每组的子项就是group关键字后面的city对象实例
group city by city.Name
//接着将该组赋给一个变量g
into g
//然后就可以通过g的Key去排序,g.Key就是by关键字后面的那个参数,即city.Name
orderby g.Key
//最后选中该组
select g
//自定义group的每个子项
var cityGroup = from city in cities
//注意,by关键字后面的参数 一定要和 group关键字后面的参数 有一定的关联,否则无法进行分组
group new{city.Name,city.PeopleCount,SomeParam="自定义"} by city.Name

可以用嵌套的foreach循环来获取每个子项。每个子项其实就是group关键字后面的对象,如city。

foreach(var theCities in cityGroup){
//首先获取每个组的Key,在分组时,by后面的那个参数city.Name
Console.WriteLine("每个组的Key:{0}",theCities.Key); //接着再次循环,获取每个组的子项,即group后面的那个参数city对象
foreach(var city in theCities){
Console.WriteLine("城市名称:{0}",city.Name);
Console.WriteLine("总人数:{0}",city.PeopleCount);
}
}

读书笔记 C# Linq查询之group关键字浅析的更多相关文章

  1. LINQ查询表达式---------group子句

    LINQ查询表达式---------group子句 LINQ表达式必须以from子句开头,以select或group子句结束.使用guoup子句来返回元素分组后的结果.group 子句返回一个 IGr ...

  2. 读书笔记之第五回深入浅出关键字---把new说透

    第五回深入浅出关键字---把new说透  ------你必须知道的.net读书笔记 new一个class时,new完成了以下两个方面的内容:一是调用newobj命令来为实例在托管堆中分配内存:二是调用 ...

  3. Entity Framework学习笔记(四)----Linq查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...

  4. Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记-单表查询SELECT语句元素

    1.select语句逻辑处理顺序: FORM WHERE GROUP BY HAVING SELECT OVER DISTINCT TOP ORDER BY 总结: 2.FORM子句的表名称应该带上数 ...

  5. Entity Framework学习笔记(五)----Linq查询(2)---贪婪加载

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们使用了Linq对Entity Framework进行了一个查询,但是通过学习我们却发现了懒加载给我来的性能上的 ...

  6. SQL.Cookbook 读书笔记5 元数据查询

    第五章 元数据查询 查询数据库本身信息 表结构 索引等 5.1 查询test库下的所有表信息 MYSQL SELECT * from information_schema.`TABLES` WHERE ...

  7. 《SQL Server 2012 T-SQL基础》读书笔记 - 7.进阶查询

    Chapter 7 Beyond the Fundamentals of Querying window function是什么呢?就是你SELECT出来一个结果集,然后对于每一行,你都想给它对应一个 ...

  8. 《SQL Server 2012 T-SQL基础》读书笔记 - 4.子查询

    Chapter 4 Subqueries 子查询分为:独立子查询(Self-Contained Subqueries)和相关子查询(Correlated Subqueries),独立子查询可以单独拿出 ...

  9. 《SQL Server 2012 T-SQL基础》读书笔记 - 3.联接查询

    Chapter 3 Joins Cross Joins(交叉联接)就是返回两个表的笛卡尔积(m行的表cross join一个n行的表得到一个m * n行的结果),它有两种标准SQL语法,第一种: SE ...

随机推荐

  1. FJNUOJ the greed of Yehan(最长路 + 权值乘积转化)题解

    Description During the trip, Yehan and Linlin pass a cave, and there is a board at the door, which s ...

  2. Oracle和MySQL的对比

    一.概述 1.1 Oracle 1.1.1 优点 开放性:Oracle 能所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持: 可伸缩 ...

  3. Ubuntu下Eclipse安装与编译ns-3遇见的各种问题

    感觉Eclipse比其它东西装起来麻烦多了. 问题拾遗 (1)安装 这一块倒是没有什么大的问题,Linux操作系统也不需要像在Windows操作系统下下一些必须的东西(比如CDT等等).安装好了JDK ...

  4. Win10重命名文件夹导致资源管理器卡顿的解决办法

    我本机使用的是 Win10 1607,不清楚是因为什么原因导致重命名文件夹时资源管理器会被卡死,找了很长时间终于找到了解决办法,现在我把步骤粘出来以便后续遇到相同问题的朋友能及时解决. 其实操作很简单 ...

  5. 纯CSS实现一个微信logo,需要几个标签?

    博客已迁移至http://lwzhang.github.io. 纯CSS实现一个微信logo并不难,难的是怎样用最少的html标签实现.我一直在想怎样用一个标签就能实现,最后还是没想出来,就只好用两个 ...

  6. ros 使用命令测试topic

    发布话题 $ rostopic pub -r /chatter std_msgs/String "test" 输出数据: $ rostopic echo /chatter data ...

  7. API接口自动化之2 处理http请求的返回体,对返回体做校验

    举例一个接口测试的常见流程 1) 发送接口请求2) 断言接口响应状态是不是200 OK3) 断言接口的响应时间低于某一个值(看情况,不是必选)4) 断言响应数据是否正确,一般的做法是判断某一个值是否相 ...

  8. QString 编码转换

    参考网址:http://blog.csdn.net/lfw19891101/article/details/6641785 (网页保存于:百度云CodeSkill33 --> 全部文件 > ...

  9. DrawDibDraw__ZC测试

    ZC: 先把 自己尝试成功的代码 记录下来,不要 弄没了之后 又忘了怎么弄... ZC: 代码 有点乱,没整理.没写 哪些是 原来MFC里面的 哪些是我自己写的,参考上一篇文章来看吧 1.VC6 的一 ...

  10. 02_DllZZ.def

    ZC: 在VC6里面,只要有这个文件就可以了.但是到了 VS2010,需要手动的指定使用这个文件才行:VS2010-->项目-->属性--> 来到窗口"??? 属性页&qu ...