LINQ的分组聚合技术

很大程度上来讲,LINQ的工作方式很像SQL。查询源定义、join、select和where子句都是相当标准的,而Group/By/Into子句则正是我们这里要仔细说明的。SQL总是返回矩阵式数据集,与它不同的是,LINQ具备了返回层次化数据的能力,这也给它自己带来了更多新的挑战。

举一个例子,将客户按照所属country和city进行分组查询,在SQL中,可能会通过在客户端手动分组或者执行1+N+(N*M)次查询来实现,一个查询用来获取所有的国家,一个查询用来获取每个国家的所有城市,然后再逐个查询出每个国家的每个城市下所有的客户列表。

而在LINQ中,它可以通过一个带有一系列子查询的查询语句一次性完成,当然,这也增加了查询的复杂度。Mitsu演示如下:

var q =
from c in db.Customers
group c by c.Country into g
select new {
g.Key,
Count = g.Count(),
SubGroups = from c in g
group c by c.City into g2
select g2};

为说明LINQ框架的灵活性,Mitsu将它简化到了仅一行:

var result = customers.GroupByMany(c => c.Country, c => c.City);

Mitsu用一种能适用于任何LINQ查询的方式实现了它。你可以在他的博客上查看源码以及关于它是如何工作的解释文章。

时间: 2024-12-03 00:07:49

LINQ的分组聚合技术的相关文章

交换机基础知识:链路聚合技术

交换机基础:链路聚合定义 链路聚合技术亦称主干技术(Trunking)或捆绑技术(Bonding),其实质是将两台设备间的数条物理链路"组合"成逻辑上的一条数据通路,称为一条聚合链路,如Figure1示意.交换机之间物理链路Link1.Link2和Link3组成一条聚合链路.该链路在逻辑上是一个整体,内部的组成和传输数据的细节对上层服务是透明的. ▲ 链路聚合示意图 聚合内部的物理链路共同完成数据收发任务并相互备份.只要还存在能正常工作的成员,整个传输链路就不会失效.仍以上图的链路聚合

SSRS:使用带参数的 MDX 查询实现一个分组聚合功能的报表

基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方 式将数据加载并呈现在报表中.但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语 法了而应该使用 MDX 查询.关于 MDX 和其它 SSRS 的文章,请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 这是我们要实现的报表效果,使用的数据库示例是 MDX Step by Step 2008 的 SSAS DEMO 数据库. 收

SSRS:报表中分组聚合的展开和收起效果与处理不规则层次结构的技巧

报表中分组聚合的展开和收起效果与处理不规则层次结构的技巧(没有子元素的时候不展开, 删除+符号) 分组聚合的展开和收起效果在SSRS Report中非常常用,并且有时还要处理一些比较特别的情况.比 如分组合并时有的层次结构是不规则的,有的组有两层,遇到这种情况应该如何处理? 注意到下面的这个需求,如果 France 下面没有其它的子层级,就不显示 + 号,如果 United States - Utah/Minnesota 州没有城市的子层次那么它们也不显示 + 号. 这样的需求在 SSRS Re

交换机基础知识:分布式链路聚合技术

交换机基础:IRF架构下的聚合技术IRF技术将多台交换设备组合成一个高性能的整体,目的是以尽可能少的开销,获得尽可能高的网络性能和网络可用性.支持IRF技术的设备都具备三个重要特性:分布式设备管理DDM.分布式链路聚合DLA和分布式弹性路由DRR.这三项技术是完成IRF技术目标不可 缺少的环节.其中,DLA用于提高传输链路的可用性和容量.多台IRF交换机堆叠后,端口的数量增加了,要求DLA能支持更多的聚合组,每组能有更多的链路聚合成员.更多的聚合组意味着交换设备可提供更多的高速链路,而更多的聚合

网站内容聚合技术的浅析

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在SEO优化学习中很多人在总结自己的SEO技术的时候都不可避免的会谈到网站的内容聚合,那么对于很多初级的SEO工作人员来说,什么是网站的内容聚 合呢?网站内容聚合都会运用在那些地方呢?网站内容聚合又有那些值得我们注意的细节呢?好了,也许以上三点对于大多说的网站优化人员来说都是很困难的,所 以今天我就会对以上的问题进行相机的分享,希望我个人的理

4.5G大幅提升无线传输速率,韩国LG U+上行载波聚合技术商用在即

随着韩国无线网络应用的快速发展,随时随地分享高清视频成为无线用户的习惯.越来越多的视频分享极大的丰富了无线应用的内容源,提升了网络的使用率和运营商的收入,因此韩国运营商纷纷计划提升无线网络上行速率,使得用户可以获得更好的分享体验. 韩国无线运营商LGU+于2016年2月10日宣布:LG U+即将商用4.5G的上行2载波聚合技术(Uplink CA)和上行高阶调制技术(Uplink 64QAM).通过这两项上行关键技术的应用,可以使用户获得高达112.5Mbps 的上行传输速率. 上行载波聚合是指

SQL字符串的分组聚合(ZT)

本文转载于T-Sql:字符串分组聚合,也许你还有更简单的办法?         今天在看订阅的RSS的时候,看到这么一个问题:T-Sql中如何对分组的信息进行聚合,并以逗号连接字符:也就是对一个表中的某个字段进行分组,然后对另一个字段聚合,如果表达得不太清楚,请看下面的表. 原表: Parent Child Charles William Charles Harry Anne Peter Anne Zara Andrew Beatrice Andrew Eugenie 处理后的结果:  Pare

Sequelize中用group by进行分组聚合查询_node.js

一.SQL与Sequelize中的分组查询 1.1 SQL中的分组查询 SQL查询中,通GROUP BY语名实现分组查询.GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在ORDER BY子句中.分组查询后,查询结果为一个或多个列分组后的结果集. GROUP BY语法 SELECT 列名, 聚合函数(列名) FROM 表名 WHERE 列名 operator value GROUP BY 列名 [HAVING 条件表达式] [W

关于linq查询分组的数据转换

问题描述 varquery=fromtinMXTabel.AsEnumerable()grouptbynew{t1=t.Field<string>("MTID"),t2=t.Field<string>("CustomerTID"),t3=t.Field<string>("PiCi"),t4=t.Field<string>("ClothNo"),t5=t.Field<stri