写点什么

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

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

关注

评论

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

使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (二)为什么要写单元测试

编程道与术

编程 编程语言 TDD 代码审查 单元测试

freecplus框架,Linux平台下C/C++程序员提高开发效率的利器

C语言技术网-码农有道

C语言程序的基本结构

C语言技术网-码农有道

C/C++

我的编程之路-2(首秀)

顿晓

方法 沟通 新项目

有没有什么上古的程序代码至今依然没被更替?

极客时间

编程 程序员 开发

C语言数据类型

C语言技术网-码农有道

自助设备系列——上下游

孙苏勇

产品 行业资讯 智能设备

打造个人商业模式第一步

一尘观世界

副业赚钱 提升认知 思维方式 商业模式 认识自己

游戏开发通用技术和工具

波波

编程 游戏开发 H5游戏

ELK 日志收集简易教程

meng

elasticsearch Logstash Kibana ELK Filebeat

NumPy 运算规则总结

张利东

Python

从全国首起暗网案件告破说起——暗网,超乎你想象

石君

网络安全 暗网 洋葱网络

嵌套文件夹复制实现

Howe

Java 文件复制

当我们说文本编辑器时,到底在说什么

付济

写作平台 InfoQ markdown

分析Kubernetes技术体系的层级,慎用比较前沿的技术

韩超

VSCode最强助攻

页面仔小杨

编程 vscode

告别手写,一键生成 Helm Chart README

郭旭东

Kubernetes Helm

我的工作原则与思考

梁帅

互联网 工作效率 原则

Kafka系列第5篇:一文读懂消费者背后的那点"猫腻"

z小赵

大数据 kafak 实时计算

我在极客时间学习的三个月

石乐

5G来临,我们该如何打造自己的家庭数据中心基础篇

ABC实验室

5G 数字资产 家庭数据中心

听保洁老大爷讲Java的垃圾回收

侯树成

JVM

最新Idea 2020.1 二种方法激活教程

公众号:V5codings

intellij-idea

2020年程序猿必读10本好书推荐

ABC实验室

学习 2020 程序员 好书推荐

Grafana+Prometheus(InfluxDB)+Jmeter使用Nginx代理搭建可视化性能测试监控平台

软测小生

Grafana Prometheus Influxdb Jmeter 性能测试

给程序员的错误找个台阶

曲水流觞TechRill

Flutter Andorid真机或打包APK杂症记录

北风烈

flutter 打包APK

高仿瑞幸小程序 03 创建轮播图

曾伟@喵先森

小程序 微信小程序 大前端 移动

面对压力的战略和战术

山楂大卷

管理 精神力 逻辑思维 压力 工作思路

快来体验 JetBrains Space EAP 版本

刘培培

DevOps JetBrains Space

docker安装mysql5.7并挂载目录到本地

桥哥技术之路

Docker

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