50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

基于 Log 的通用增量 Checkpoint

Apache Flink

大数据 flink 实时计算

我们为什么一定要持有一枚 Smart Royal NFT?

鳄鱼视界

要做好用户体验,一定要知道这些心理学效应!

产品海豚湾

心理学 产品经理 产品设计 用户体验 交互设计

百度百舸·AI 异构计算平台,加速自动驾驶模型迭代

Baidu AICLOUD

自动驾驶 模型训练 异构计算

外包学生管理系统架构文档

Geek_e5f2e5

论坛预告 | 1月9日举办2023 ICT深度观察政企数字化转型分论坛

信通院IOMM数字化转型团队

数字化转型 IOMM ICT深度观察

React源码分析1-jsx转换及React.createElement

flyzz177

React

模块3作业-学生管理系统的架构设计文档

陈实

「架构实战营」

Triple 协议支持 Java 异常回传的设计与实现

阿里巴巴云原生

阿里云 云原生 dubbo

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)

码界西柚

dubbo sentinel 1月日更 sentinel dashboard

模块三

GeekMLS

#架构训练营

【JavaScript】JavaScript(js)简单介绍

No8g攻城狮

JavaScript JavaScript4

PING命令解析

穿过生命散发芬芳

ping 1月月更

一种简洁又不失优雅的工作流:极狐 flow

极狐GitLab

DevOps flow workflow 极狐GitLab 分支管理

SQL Studio:一款纯Web化SQL开发工具,关键是免安装还免费!

雨果

sql 数据库管理工具 SQL开发

私有部署V3.8:自建内部应用库和预置应用

明道云

架构实战营 - 模块 3- 作业

zealot0317

fastposter v2.11.0 天花板级的海报生成器

物有本末

海报 海报生成器 海报编辑器 海报生成 海报小程序

React源码分析(三):useState,useReducer

flyzz177

React

游戏行业(北区)客户沙龙丨阿里云用户组北京站

云布道师

阿里云

【异常】Cause: java.sql.SQLException: Invalid value for getInt()

No8g攻城狮

sql Java、 javaWeb

我们为什么一定要持有一枚 Smart Royal NFT?

股市老人

沙龙预告 | 1月11日举办数字化业务安全生产沙龙第2期

信通院IOMM数字化转型团队

数字化转型 IOMM 数字化业务安全生产

Hands on HTML & CSS

无人之路

CSS html

阿里云网络解决方案架构师任江波:全球一张网,支撑游戏业务高效互联

云布道师

阿里云

2022年中国特色智能工厂领航制造业升级分析报告

易观分析

数字经济 智能工厂

2023-01-05:konradkleine/docker-registry-frontend是registry的web界面工具之一。请问部署在k3s中,yaml如何写?

福大大架构师每日一题

云原生 k8s 福大大

React源码分析(二)渲染机制

flyzz177

React

干货!C4D的7个实用插件分享

Finovy Cloud

云渲染 C4D

TextView(文本框)详解

芯动大师

android UI TextView

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