写点什么

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

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

关注

评论

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

传统 VC 机构,是否还能在 Fair launch 的散户牛市中胜出?

大瞿科技

使用JMeter安装RabbitMQ测试插件的步骤

百度搜索:蓝易云

云计算 Linux 运维 RabbitMQ Jmeter

vivo 海量微服务架构最新实践

vivo互联网技术

开源 微服务 中间件

文心大模型融入荣耀MagicOS!打造大模型“端云协同”创新样板

爱编程的喵喵

苹果应用上架是否需要软件著作权?

雪奈椰子

从 AutoMQ Kafka 导出数据到 Databend

Databend

Kafk

传统 VC 机构,是否还能在 Fair launch 的散户牛市中胜出?

石头财经

C 语言文件读取全指南:打开、读取、逐行输出

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

网易首款鸿蒙原生游戏《倩女幽魂》手游完成开发,商业化版本已就绪

新消费日报

可编程线性霍尔传感器 IC

梦笔生花

docker rabbitmq-清空queue队列数据

百度搜索:蓝易云

云计算 Linux 运维 RabbitMQ 云服务器

传统 VC 机构,是否还能在 Fair launch 的散户牛市中胜出?

加密眼界

舞台婚庆租赁屏选哪个型号更好?

Dylan

节日 LED显示屏 户外LED显示屏 led显示屏厂家 户内led显示屏

Programming Abstractions in C阅读笔记:p242-p245

codists

【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你探索和分析JMM并发模型之(重排序机制)

洛神灬殇

Java 重排序 并发编程 JVM as-if-serial

传统 VC 机构,是否还能在 Fair launch 的散户牛市中胜出?

股市老人

PreparedStatement实践和批处理实践

FunTester

在线文档软件哪个好?5个好用的协同文档app推荐!

彭宏豪95

团队协作 在线文档 在线白板 在线协同文档 效率软件

京东方精电亮相CES2024,携手合作伙伴共绘智慧出行未来图景

科技热闻

传统 VC 机构,是否还能在 Fair launch 的散户牛市中胜出?

BlockChain先知

IPQ8074: the leader in high-performance router motherboard chips

wallysSK

XSKY 与 英特尔联手,释放星飞分布式全闪存储潜能

XSKY星辰天合

sds intel 软件定义存储 QAT XSKY

数据库内核那些事|PolarDB查询优化:好好的谓词,为什么要做下推?

阿里云瑶池数据库

数据库 阿里云 云原生

2024-01-10:用go语言,给你一个下标从 0 开始的二维整数数组 pairs 其中 pairs[i] = [starti, endi] 如果 pairs 的一个重新排列 满足对每一个下标 i

福大大架构师每日一题

福大大架构师每日一题

Go与C语言的互操作,import “C“的实例

百度搜索:蓝易云

Go 云计算 Linux C语言 云服务器

极狐 GitLab 冷知识:使用 Email 也可以创建 Issue?

极狐GitLab

线索系统性能优化实践

京东科技开发者

异步编程利器:CompletableFuture深度解析

Java随想录

Java 多线程 并发

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