zoukankan      html  css  js  c++  java
  • Linq中使用Group By

    学习Linq时,经常会遇到Linq使用Group By问题,这里将介绍Linq使用Group By问题的解决方法。

    1.计数

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

    语句描述:Linq使用Group By和Count得到每个CategoryID中产品的数量。

    说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。

    2.带条件计数

    var q =  
    from p in db.Products  
    group p by p.CategoryID into g  
    select new {  
    g.Key,  
    NumProducts = g.Count(p => p.Discontinued)  
    }; 

    语句描述:Linq使用Group By和Count得到每个CategoryID中断货产品的数量。

    说明:先按CategoryID归类,取出CategoryID值和各个分类产品的断货数量。 Count函数里,使用了Lambda表达式,Lambda表达式中的p,代表这个组里的一个元素或对象,即某一个产品。

    3.Where限制

    var q =  
    from p in db.Products  
    group p by p.CategoryID into g  
    where g.Count() >= 10  
    select new {  
    g.Key,  
    ProductCount = g.Count()  
    }; 

    语句描述:根据产品的―ID分组,查询产品数量大于10的ID和产品数量。这个示例在Group By子句后使用Where子句查找所有至少有10种产品的类别。

    说明:在翻译成SQL语句时,在最外层嵌套了Where条件。

    4.多列(Multiple Columns)

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

    语句描述:Linq使用Group By按CategoryID和SupplierID将产品分组。

    说明:既按产品的分类,又按供应商分类。在by后面,new出来一个匿名类。这里,Key其实质是一个类的对象,Key包含两个Property:CategoryID、SupplierID。用g.Key.CategoryID可以遍历CategoryID的值。

    5.表达式(Expression)

    var categories =  
    from p in db.Products  
    group p by new { Criterion = p.UnitPrice > 10 } into g  
    select g; 

    语句描述:Linq使用Group By返回两个产品序列。第一个序列包含单价大于10的产品。第二个序列包含单价小于或等于10的产品。

    说明:按产品单价是否大于10分类。其结果分为两类,大于的是一类,小于及等于为另一类。

    6.多列查询

    var query=from t in dt.AsEnumerable()  
              group t by  new{t1=t.Field<DateTime>("flightTime"),t2=t.Field<DateTime>("arrivalTime")} into m  
              select new  
              {  
              flightno=m.First().Field<string>("flightno"),  
              flightTime=m.Key.t1,  
              arrivalTime=m.Key.t2,  
              passenger=string.Join("/",m.Select(n=>n.Field<string>("passenger")).ToArray()),  
              rowcount=m.Count()  
              };  
      Console.WriteLine("==============输出结果:================");  
      Console.WriteLine("flightno     flightTime               arrivalTime              passenger      rowcount" +"/n");  
       
      query.ToList().ForEach(q=>Console.WriteLine(q.flightno+"    "+q.flightTime.ToString("yyyy-MM-dd HH:mm")+"     "+q.arrivalTime.ToString("yyyy-MM-dd HH:mm")+"    "+q.passenger+"                 "+q.rowcount));  

    转自:http://developer.51cto.com/art/200909/150348.htm

  • 相关阅读:
    Kinect 开发 —— 硬件设备解剖
    Kinect 开发 —— 引言
    (转)OpenCV 基本知识框架
    OpenCV —— 摄像机模型与标定
    OpenCV —— 跟踪与运动
    OpenCV —— 图像局部与分割(二)
    OpenCV —— 图像局部与部分分割(一)
    OpenCV —— 轮廓
    OpenCV —— 直方图与匹配
    OpenCV —— 图像变换
  • 原文地址:https://www.cnblogs.com/xiangzhong/p/2807716.html
Copyright © 2011-2022 走看看