写点什么

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

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

关注

评论

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

缓存思想在算法设计中的应用梳理

che-ri-sh

缓存

架构师第8周练习

小蚂蚁

第八周·总结·数据结构预算法

刘璐

Hadoop 中的 Namenode 和 Datanode

dongge

第八周作业

方堃

作业二

Kiroro

week8

不在调上

单向链表合并节点

chenzt

作业

不在调上

Spring系列:请问各位大佬为何要学spring?

简爱W

AI大有可为:NAIE平台助力垃圾分类

华为云开发者联盟

AI 模型训练 垃圾回收机制 数据集 华为云

TNFE-Weekly[第六十六周已更新]

莹姐🙈

小程序 大前端 周报

如何在微服务团队中高效使用 Git 管理代码?

看山

git 微服务 高效 签约计划第二季

链表查找算法,HDFS数据节点宕机处理

dony.zhang

架构师课程第八周总结

dongge

架构训练营第八周感悟

张锐

PC人脸识别登录,出乎意料的简单

程序员小富

Java 人脸识别

作业一

Kiroro

架构师训练营 - 学习总结 第 8 周

铁血杰克

第八周·命题作业

刘璐

总结

chenzt

抢占5G大市场 众盟科技助力企业跑赢短视频营销新赛道

人称T客

华青融天战略拓展总监王旭详解IT运维的九阳神功

DT极客

37岁程序员被裁,想用6月工资跪舔领导划掉被裁名额,结果蒙了!

程序员生活志

程序员 职场

各类SQL中日期时间那些事

大唐小生

sql 大数据 SQL语法

教培行业工程师面临着什么挑战?研发面板全栈式解决工程师的痛点

Deepexi

DevOps 运维 敏捷开发 研发管理 单元测试

架构师第8周学习总结

小蚂蚁

实现DevOps的三步工作法

看山

DevOps 凤凰项目 签约计划第二季

区块链+国防安全,科技是核心战斗力

CECBC

最新硬件虚拟化检测技术,让攻击者逃不出“楚门的世界”

百度安全

云计算 安全 虚拟化

CompletableFuture运行流程源码详解

编号94530

Java 并发编程 多线程 CompletableFuture

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