写点什么

LINQ 的分组聚合技术

  • 2008-01-07
  • 本文字数:558 字

    阅读完需:约 2 分钟

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

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

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

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

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

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

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

2008-01-07 23:441910
用户头像

发布了 90 篇内容, 共 13.6 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

JCJC错别字检测JS接口新增CORS跨域支持

田春峰-JCJC错别字检测

我为什么不愿在公众号发文章,却愿在写作平台发

小天同学

微信公众平台 产品 反馈 写作平台

【奖项公布】致内测用户——亲爱的1号创作者们~

InfoQ写作社区官方

写作平台 1号创作者 奖品 热门活动

程序员陪娃漫画系列——夜宵

孙苏勇

程序员 生活 陪伴 漫画

学会打破确定性思维,才能做得更好

松花皮蛋me

高效工作 10X工作法 精益开发

【获奖名单公示】作为一名技术人,我为什么要写作?

InfoQ写作社区官方

程序员 写作 写作平台 热门活动

稀缺:我们为什么会陷入贫穷与忙碌

insight

读书笔记

怎么写出bug的

三爻

媒体的经营 03 | 很显然,媒体卖广告是最没有前途的

邓瑞恒Ryan

创业 媒体 商业模式

说说疫情下的新常态该怎么应对

CD826

疫情 新常态

回"疫"录(5):不见面,云拜年

小天同学

疫情 回忆录 现实纪录 纪实

死磕Java并发(5):线程详解,Java开发这么久,这些线程的基础知识你确定都会了?

Seven七哥

Java Java并发 线程

npm version 使用详解

Leo

大前端 npm 语义化 版本控制

这一战,必战,若一去不返,便一去不返

霍太稳@极客邦科技

创业 项目管理 团队建设 InfoQ

网站是什么?

insight

网站

香港上市"失效"、传言申请科创板,聊聊半年亏损52亿的旷视科技 | IPO招股书系列(4)

赵新龙

IPO 旷视科技 上市 招股说明书 科创板

Gary的唠叨(二):先算是非,后算得失

小盖

Gary的唠叨 感悟

专家的直觉和你的直觉

池建强

书摘 直觉

3000字长文教你大数据该怎么学!

老蒙

Java 大数据 spark 学习 开源

媒体的经营 02 | 媒体/内容行业的主要变现方式

邓瑞恒Ryan

创业 投资 商业

对开发人员有用的定律、理论、原则和模式

松花皮蛋me

Java 设计模式

您到底要说什么?

水色

网站架构方法

Ya

架构 方法论 网站 大型软件

深度工作

insight

读书笔记

原创 | DDD与分层

编程道与术

人生一大误区:做到80%就不错了

池建强

个人成长 自我管理

小技巧:ssh -D 让终端访问或下载快一点

肖飞码字

Linux Shell

Java并发编程系列——线程的等待与唤醒

孙苏勇

Java Java并发 并发编程 线程

如何高效开会

熊斌

效率 效率工具

网络编程方法

Ya

方法论 网络编程 socket

夏天将来,愿我们有足够的知识继续前进

Amon Lee

LINQ的分组聚合技术_.NET_Jonathan Allen_InfoQ精选文章