写点什么

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:442313
用户头像

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

关注

评论

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

Aspose word 转换为pdf 排版错位和数据丢失

blues199

Java Apache POI

聊聊前端日志库在SaaS产品中的应用与设计

元三

大前端 SaaS

区块链能否一劳永逸地结束痛苦的选票争端?

CECBC

区块链

【得物技术】Web Components 初探

得物技术

Web API 得物技术 Web Component 组件

LeetCode题解:120. 三角形最小路径和,动态规划(从上到下),JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

区块链与数字货币的发展到底有什么意义

CECBC

金融

用 Selenium 搞定自动化测试项目,途牛搜机票。

梦想橡皮擦

28天写作 2月春节不断更

中核携手北京天源迪科完成电子商城二期项目,开创集团数字化采购新局面

DT极客

如何通过事务消息保障抢购业务的分布式一致性?

阿里巴巴中间件

阿里云 云原生 电商 消息队列 分布式柔性事务‘’

我看JAVA 之 AbstractStringBuilder & StringBuffer & StringBuilder

awen

Java 源码 jdk string

区块链打造“红娘链”,婚姻上链让爱更“牢固”

CECBC

婚姻

荟聚·沉淀——百度大脑AI开放平台的2020年

百度大脑

写给管理者的睡前故事

每天读本书

读书笔记 每天读本书

MyCat集成MySQL完成数据库集群建设

831143

Java MySQL mycat

技术干货 | mPaaS 小程序高玩带你起飞:客户端预置小程序无视网络质量

蚂蚁集团移动开发平台 mPaaS

小程序 网络环境 mPaaS

数字化转型提速,DataPipeline助力中石油产业大数据实时共享能力再提升

DataPipeline数见科技

数据融合

常见加密方式及Python实现

行者AI

加密

341 万考生,除了图书馆他们去了这样一个地方

IoT云工坊

小程序 人工智能 物联网 云平台 24小时无人自习室

我决定输出一篇文章用于记录一个足足花了四小时才找到的BUG

LSJ

Java spring aop ProxyFactory proxyTargetClass

单例设计模式

桃子

医者,智也:智慧医院破茧时,翻开转型新一页

脑极体

未来赚钱的行业大预测

ES_her0

28天写作

第五周作业:用例流程图

克比

android开源!字节跳动Android岗经典面试真题,含泪整理面经

欢喜学安卓

android 程序员 面试 移动开发

买基金赔掉一条裤衩之后,我又回来更文了

Java_若依框架教程

投资 理财 基金 茅台

正月十五吃汤圆CountDownLatch

叫练

AQS join 共享锁 CountDownLatch 多线程高并发

Docker安装

Sakura

Docker

Java中的String类型到底占用多大的内存空间?

冰河

Java 性能优化 string 高并发 内存空间

DBS

陈皓07

Kafka 中所谓的 ‘零拷贝’ 技术到底是什么?

李尚智

Java kafka 程序员 架构 微服务

产品经理第五周:如何绘制流程图?

克比

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