C# 3.0入门系列(八)-之GroupBy操作

换一种写作风格。本节讲groupby操作。

在所有的Linq To Sql操作中,GroupBy是最难理解的一个。因为,这里和Sql的出入较大。而Group真的就能返回n多组。

打开vs,新建一工程,加入System.Data.Linq.dll的引用。把northwind数据库做个映射,添加到工程里。创建一Northwind类的对象。在这里呢,我们要做分组统计,我们要先明白什么是分组。在我们开始设计product表时,我们欲留了一列叫做CategoryID。 这个字段,代表了这条记录中的产品,归属于那个类别。如图,字段的设计。


可以简单的举例,比如,当CategoryID的值为1时,就表示,对应的记录的产品是饮料类的。当它为2时,代表调味品类的。具体代表那一类,要看事先的约定。一般会专门有个表来保存这个约定。在northwind中,用Categories 表来保存这个约定。下面是catagories表中的纪录。


Categories 和Product表,通过CategoryID字段关联关系。也就是说,Product表中,CategoryID字段所代表的意思,保存在Categories 表中。好了,知道分组的概念了,我们开始分类统计吧。在Linq To Sql的所有操作中,groupby算是比较难理解的一个。我要友好的提醒你注意下这里的分组所用的字段哦,这个将来是要被用做继承的哦。

时间: 2024-09-06 17:58:42

C# 3.0入门系列(八)-之GroupBy操作的相关文章

C# 3.0入门系列-目录导航

1 C# 3.0 入门系列(一) 从linq开始引C# 3.0. 2 C# 3.0入门系列(二) 数据库的准备,引入Linq To Sql的准备. 3 C# 3.0入门系列(三) 第一个Linq To Sql工程. 4 C# 3.0入门系列(四)-之Select操作 Select语法. 5 C# 3.0入门系列(五)-之Where操作 Where操作语法. 6 C# 3.0入门系列(六)-之OrderBy操作 OrderBy 操作语法. 7 C# 3.0入门系列(七)--之OR工具介绍 C# 3

C# 3.0入门系列(十)-之Join操作

本节讲join操作.我们知道,T-sql中,有三种最基本的join,inner join, left join, 和right join. 而dlinq并不支持right join.道理很简单,right join以right表为基础,left表中没有对应记录的,将以null值填充.而dlinq以left表做为主表创建对象.如果一个对象为null,你如何获取它的其他的属性呢? 在C# 3.0入门系列(四)-之Select操作一文中,我们提到了query expression首先会被翻译成标准的A

C# 3.0入门系列(五)-之Where操作

从本节开始,本文正式更名为C#3.0入门系列.先发布一则消息,VS2007 Beta版本已经发布咯,下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID=1FF0B35D-0C4A-40B4-915A-5331E11C39E6&displaylang=en 大家快去下载呀,我也好和大家一起体验该版本最新功能呀. dlinq也更名为linq to sql.本文也跟着做相应变化,稍候,我会去更新前面的文章.我们先接着讲linq的

C# 3.0入门系列(九)-之GroupBy操作

有朋友反馈说我提供的sample不能编译.大概是版本的问题,可以到http://msdn2.microsoft.com/en-us/bb330936.aspx下载for beta1的版本.本节接着讲groupby. 上一节,我们讲了如何理解groupby返回的结果.本节会延这个思路阐述下去.先来看下面的例子 GroupBy操作中Select的匿名类 var q = from p in db.Products group p by p.CategoryID into g select new {

C# 3.0入门系列(十二)-Lambda表达式中Lifting

Lambda表达式是由匿名方法演化而来的更加高级的形式.关于匿名方法,请参阅http://msdn.microsoft.com/msdnmag/issues/04/05/C20/.关于Lambda表达式的演化,请参阅http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx?loc=zh.英文原版为http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/. 1,L

C# 3.0入门系列(七)--之OR工具介绍(上)

--不得不再次给关注dlinq的朋友道歉了.好久都没有更新blog了.因为工作的变动,还要赶期限,没有时间关注这里了. 先发布一则消息.Orcas Beta1, 这个才是beta1,可以到http://www.microsoft.com/downloads/details.aspx?FamilyID=f10fb5df-e369-4db4-b9a7-845dbf793368&DisplayLang=en 下载.5月1号的版本.最早4月19号就出来过一个,只是没有在意.还有一个http://www.

SQL Server 7.0 入门(八)---存储过程中返回结果

server|存储过程 存储过程中返回结果 从存储过程中返回结果有三种方式: 1. 返回结果集 这是客户端应用程序返回结果的最通用的方法.结果集是通过使用SELECT语句选择数据产生的.结果集可以从永久表.临时表或局部变量中产生.将结果返回到另一个存储过程不是一种有效的方法.存储过程不能访问另一个存储过程建立的结果集. 例如从永久表中返回结果集: USE pubs GO CREATE PROCEDURE ap_CreateResultFromPermtable AS SELECT au_inam

C# 3.0入门系列(十一)-之In, Like操作

有这么一个例子,寻找一个表中的某个字段介于某个给定的集合该怎么办?Sql写起来很简单,比如:Select * from table where id in (2,3, 4, 5). 就是寻找id字段为这个给定的集合(2,3, 4, 5)内的值.那Linq to Sql该怎么做呢?一个字,简单. In Operator 比如,我们想要查找,"AROUT", "BOLID" 和 "FISSA" 这三个客户的订单.该如何做呢?Linq to Sql是这

C# 3.0入门系列(四)-之Select操作

先给关注dlinq的朋友们道歉,最近工作实在忙,没有时间来写blog.从本节开始,我们讲dlinq语法咯.我们先从select子句讲起.看下面的例子. var q = from c in db.Customers select c.ContactName; 这是一个最简单的dlinq查询语句,查询得到联系人的名字.在这里,我需要提醒下大家的是,像这个语句只是个声明,dlinq并没有真正把数据取出来,只有当你需要该数据的时候,它才会帮你去取,这就是延迟加载(deferred loading).如果