2008博客园T恤 开发者征途系列图书
Windows Embedded 《大话设计模式》专题
技术书籍推荐专题 《你必须知道的.NET》
您的位置: Linq专题 » LINQ基础 >> LINQ to SQL语句入门篇

LINQ to SQL语句(6)之Group By/Having

作者:李永京  来源:博客园  时间:2008-09-18  阅读:288 次  原文链接   [收藏]  
编辑点评:这个系列的第六篇,讲解Group By/Having操作符用法。
[1] Group By/Having讲解1
[2] Group By/Having讲解2
[3] Group By/Having讲解3

Group By/Having操作符

适用场景:分组数据,为我们查找数据缩小范围。

说明:分配并返回对传入参数进行分组操作后的可枚举对象。分组;延迟

1.简单形式:

var q =
    from p in db.Products
    group p by p.CategoryID into g
    select g;

语句描述:使用Group By按CategoryID划分产品。

说明:from p in db.Products 表示从表中将产品对象取出来。group p by p.CategoryID into g表示对p按CategoryID字段归类。其结果命名为g,一旦重新命名,p的作用域就结束了,所以,最后select时,只能select g。当然,也不必重新命名可以这样写:

var q =
    from p in db.Products
    group p by p.CategoryID;

我们用示意图表示:

GroupBy分组统计示意图

如果想遍历某类别中所有记录,这样:

foreach (var gp in q)
{
    if (gp.Key == 2)
    {
        foreach (var item in gp)
        {
            //do something
        }
    }
}

2.Select匿名类:

var q =
    from p in db.Products
    group p by p.CategoryID into g
    select new { CategoryID = g.Key, g }; 

说明:在这句LINQ语句中,有2个property:CategoryID和g。这个匿名类,其实质是对返回结果集重新进行了包装。把g的property封装成一个完整的分组。如下图所示:

GroupBy分组匿名类示意图

如果想遍历某匿名类中所有记录,要这么做:

foreach (var gp in q)
{
    if (gp.CategoryID == 2)
    {
        foreach (var item in gp.g)
        {
            //do something
        }
    }
}

继续>>下一页


[第1页] [第2页] [第3页]
相关链接





博客园知识库,专业的技术文章