写点什么

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

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

关注

评论

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

如何使用腾讯云提供的云主机

汪子熙

腾讯云 云主机 Cloud

观察者模式在One Order回调函数中的应用

汪子熙

CRM SAP abap

高性能 JavaScriptの六 -- 老生常谈Ajax

空城机

JavaScript ajax 大前端 5月日更

SAPGUI里实现自定义的语法检查

汪子熙

SAP abap SAPGUI 语法检查

如何用ABAP代码读取CDS view association的数据

汪子熙

CDS SAP abap CDS view

金融科技如何在产业互联网蓝海中扬帆远航?大数据、区块链与物联网应用被看好

CECBC

ABAP git客户端的简单介绍

汪子熙

GitHub SAP abap

如何从ERP将Material的Batch信息下载到CRM

汪子熙

CRM SAP ERP abap

One Order行项目里Item Category是怎么计算出来的

汪子熙

CRM SAP abap ONE-ORDER

ABAP OPEN SQL里OPEN CURSOR和SELECT的比较

汪子熙

CRM SAP abap ST05 OPENSQL

在浏览器里使用SAPGUI里的SE80

汪子熙

JavaScript SAP abap Fiori SAP UI5

架构师训练营 作业四

开拓纪

利用CRM中间件Middleware从ERP下载Customer Material的常见错误

汪子熙

中间件 CRM SAP ERP

CRM中间件里的发布-订阅者模式

汪子熙

CRM SAP ERP abap

如何使用代码获得一个function module的Where Used List

汪子熙

CRM SAP abap SAPGUI

CRM和ERP的Sales Organization的映射关系

汪子熙

中间件 CRM SAP ERP

CRM订单状态的Open, In process和Completed这些条目是从哪里来的

汪子熙

CRM SAP ERP abap

架构实战营 - 模块四作业

Sun

Mybatis获取自增长id

风翱

mybatis 5月日更

数字货币兴起背后:全球货币超发 主权信用贬值

CECBC

如何检查某个用户是否具有某个权限对象上定义的某种权限

汪子熙

CRM ERP abap Authorization Authentication

ABAP和Java里关于DEFAULT(默认)机制的一些语言特性

汪子熙

SAP abap Netweaver SAPGUI

如何快速的学习一门新的编程语言?

架构精进之路

学习 5月日更

架构训练营-模块四作业

冬天的树

设计千万级学生管理系统的考试试卷存储方案

俞嘉彬

如何在ubuntu上安装virtualbox的driver module vboxdrv

汪子熙

ubuntu 虚拟机 vboxdrv 驱动

如何从ERP下载Sales BOM到CRM

汪子熙

CRM SAP ERP abap

如何证明CRM WebClient UI上的应用是有状态(Stateful)的

汪子熙

CRM SAP abap WebClient UI

如何在Chrome development tool里查看C4C前台发送的未经 GZIP 压缩之前的请求细节

汪子熙

chrome SAP C4C Chrome开发者工具

为什么使用中间件下载时总是收到警告消息Object is in status Wait

汪子熙

中间件 CRM SAP ERP

CRM product UI里assignment block的显示隐藏逻辑

汪子熙

CRM SAP abap

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