首页  ·  知识 ·  编程语言
LINQ的分组聚合技术
张海龙  豆豆技术应用  .NET  编辑:dezai  图片来源:网络
article_c id=fontsize>   很大程度上来讲,LINQ的工作方式很像SQL。查询源定义、join、select和where子句都是相当标准的,而Group/By/Into子

  很大程度上来讲,LINQ的工作方式很像SQL。查询源定义、join、select和where子句都是相当标准的,而Group/By/Into子句则正是我们这里要仔细说明的。SQL总是返回矩阵式数据集,与它不同的是,LINQ具备了返回层次化数据的能力,这也给它自己带来了更多新的挑战。

  举一个例子,将客户按照所属country和city进行分组查询,在SQL中,可能会通过在客户端手动分组或者执行1+N+(N*M)次查询来实现,一个查询用来获取所有的国家,一个查询用来获取每个国家的所有城市,然后再逐个查询出每个国家的每个城市下所有的客户列表。

  而在LINQ中,它可以通过一个带有一系列子查询的查询语句一次性完成,当然,这也增加了查询的复杂度。Mitsu演示如下:

var q =
from c in db.Customers
group c by c.Country into g
select new {
g.Key,
Count = g.Count(),
SubGroups = from c in g
group c by c.City into g2
select g2};

  为说明LINQ框架的灵活性,Mitsu将它简化到了仅一行:

var result = customers.GroupByMany(c => c.Country, c => c.City);

  Mitsu用一种能适用于任何LINQ查询的方式实现了它。你可以在他的博客上查看源码以及关于它是如何工作的解释文章。

本文作者:张海龙 来源:豆豆技术应用
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读