Linq在集合操作上很方便,很多语法都借鉴自sql,但linq的分组却与sql有一定的区别,故整理发布如下。 1.  Linq分组 分组后以Key属性访问分组键值。 每一组为一个IEnumberAble或IQeuryAble的集合,可以继续枚举。 Sample:


 string[] World = { "Hello","World"}; string[] Brother = { "Hello","Brother"}; var result = from wld in World from bth in Brother group new { wld, bth } by new { wld, bth }.bth; OR var result = from wld in World from bth in Brother group new { wld, bth } by bth;
foreach (var obj in result) { foreach (var ct in obj) { Response.Write(ct.wld + ct.bth); } }

说明:在linq里面,group by 和groupby是两个不同的概念,前者标识分组,后者标识排序。分组时如不特意制定select,则将分组后的结果作为结果集。

2.   Linq排序后,分组再排序


    public class Student      {          public string Name = "";          public string Sex = "";          public int Age;      }
Student[] stAry = { new Student{ Name ="Jon1",Sex="female",Age =21}, new Student{ Name ="Jon2",Sex="male",Age =22}, new Student{ Name ="Jon3",Sex="male",Age =33}, new Student{ Name ="Jon4s",Sex="female",Age =44}, new Student{ Name ="Jon5",Sex="female",Age =25}, new Student{ Name ="Jon6",Sex="female",Age =26} }; var c = from st in stAry orderby st.Age group st by st.Sex into temp orderby temp.Key ascending select temp;

概要说明: Linq查询后产生的结果集和sql类似,如果涉及到多个查询则会产生一个多“列”的集合用以“select”,如果用到linq的分组功能,则分组后的结果将作为一个“集合”,而这个集合可以在他所在的查询中作为一个源被查询,也可以当做一个元素被直接“select”。如下例所示。注意:Into在linq里面也用以分组,产生的结果用来查询,当然,不用这个结果也不会错。

3.  join分组:

        int[] Ary1 = { 1, 23, 45, 67, 8, 4, 4 };          int[] Ary2 = { 23, 1, 1,5, 67, 4 };
var c = from A1 in Ary1 join A2 in Ary2 on A1 equals A2 into VAL2 select VAL2;

左外连接:

        var c = from A1 in Ary1                  join A2 in Ary2 on A1 equals A2 into VAL2                  from a2 in VAL2. DefaultIfEmpty(int.MinValue)                   select new {A1,a2,VAL2};

注:DefaultIfEmpty(int.MinValue)表示集合为空的时候,用指定的默认值关联前面的集合。如果不指定,则由于集合为空,A1找不到关联的对象将不产生相应的行。

4.linq嵌套查询   查询某个数据集中不全为null或“”的列

            var c = from DataColumn dc in ds.Tables[0].Columns                      where ( from dr in dt.AsEnumerable()                              where !dr.IsNull(dc)                                  select dr                                  ).Any()                      select dc;

5.分组后统计

                var groupedApply901 = (from y in arrInput
group y by new { y.UnavailableType, y.FlowType } into z
select new CashBagUnavailableShare
{
UnavailableType = z.Key.UnavailableType,
FlowType = z.Key.FlowType,
UnavailableVol = z.Sum(s => s.UnavailableVol), }).ToList<CashBagUnavailableShare>();

 转一下自己的文章

Linq分组功能的更多相关文章

  1. 在 Students 的 Index 页面增加列标题链接(排序),分页,过滤和分组功能

    3-1  在 Students 的 Index 页面增加列标题链接 为 Index 页面增加排序的功能,我们需要修改 Student 控制器的 Index 方法,还需要为 Student 视图增加代码 ...

  2. 扩展GridView控件——为内容项添加拖放及分组功能

    引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...

  3. iOS开发——UI篇Swift篇&玩转UItableView(三)分组功能

    UItableView分组功能 class UITableViewControllerGroup: UIViewController, UITableViewDataSource, UITableVi ...

  4. Linq分组操作之GroupBy,GroupJoin扩展方法源码分析

    Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...

  5. SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询

    连接查询 inner join,用的最多,表示多张表一一对应 聚合函数 操作行数据,进行合并 sum.avg.count.max.min 开窗函数 将合并的数据分布到原表的每一行,相当于多出来了一列, ...

  6. Linq分组,linq方法分组

    Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均值等. Linq中的Groupby方法也有这种功能.具体实现看代码: 假设有如下的一个数据集: 01.public class ...

  7. Linq分组查询统计

    这里介绍Linq使用Group By和Count得到每个CategoryID中产品的数量,Linq使用Group By和Count得到每个CategoryID中断货产品的数量等方面. 学经常会遇到Li ...

  8. C# 泛型分组和Linq分组的异同

    没什么好说的,因为用的到,所以作个记录, 代码如下: using System; using System.Collections.Generic; using System.Linq; using ...

  9. c# linq 分组groupby

    转载: https://www.cnblogs.com/cncc/p/9846390.html 一.先准备要使用的类: 1.Person类: class Person { public string ...

随机推荐

  1. WireShark抓包过程

    wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了. 为了安全考虑 ...

  2. js:数据结构笔记13--检索算法

    顺序查找:也称线性查找,暴力查找的一种 基本格式: var nums = []; for(var i = 0; i < 10; ++i) { nums[i] = Math.floor(Math. ...

  3. MapReduce多线程下的错误

    最近在写一个MR调度程序,在以服务进程中同时开启了两个MapReduce线程.这两个MR共享同一份输入源,此时会造成Cast异常: java.lang.ClassCastException: org. ...

  4. 【python游戏编程之旅】第二篇--pygame中的IO、数据

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/49 ...

  5. 折线分割平面[HDU2050]

    折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  6. 骨牌铺方格[HDU2046]

    骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. storm环境搭建

    备注——使用: 1.单机版本: 启动zkServer.nimbus.supervisor.ui服务: zkServer.sh start zkServer.sh status #查看zkserver是 ...

  8. POJ 3352 (边双连通分量)

    题目链接: http://poj.org/problem?id=3352 题目大意:一个连通图中,至少添加多少条边,使得删除任意一条边之后,图还是连通的. 解题思路: 首先来看下边双连通分量的定义: ...

  9. hiho#1033 : 交错和

    描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1,定义交错和函数: f(x) = a0 - a1 + a2 - ... + ( - 1)n - 1a ...

  10. COJ969 WZJ的数据结构(负三十一)

    WZJ的数据结构(负三十一) 难度级别:D: 运行时间限制:3000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 A国有两个主基站,供给全国的资源.定义一个主基站 ...