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. HashMap两种遍历数据的方式

    HashMap的遍历有两种方式,一种是entrySet的方式,另外一种是keySet的方式. 第一种利用entrySet的方式: Map map = new HashMap(); Iterator i ...

  2. Time.deltaTime 增量时间

    static var deltaTime : float Description描述 The time in seconds it took to complete the last frame (R ...

  3. BZOJ4348 : [POI2016]Park wodny

    首先特判全部都是A或者全部都是B或者$n=1$的情况. 然后把矩阵四周都填充上A,枚举一个块,分以下情况讨论: 1.在它四周选两个块扩展,此时平方暴力枚举即可. 2.在它四周选定一个方向扩展两步. 3 ...

  4. BZOJ3847 : ZCC loves march

    注意到集结操作相当于合并一些点 于是我们可以使用并查集 对于每一行.每一列维护一个链表,储存里面的点 查询x时,在并查集中找到x的祖先u,此时x的坐标就是u的坐标 然后扫描u所在行列的链表,依次删除每 ...

  5. 转载关于KeyPress和KeyDown事件的区别和联系

    KeyDown:在控件有焦点的情况下按下键时发生. KeyPress:在控件有焦点的情况下按下键时发生. KeyUp:在控件有焦点的情况下释放键时发生. 1.KeyPress主要用来接收字母.数字等A ...

  6. HDU 3065 (AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...

  7. python模块之codecs

    http://blog.csdn.net/suofiya2008/article/details/5579413  

  8. MySQL配置SQL Assistant提示

    以前开发一直使用SQL Server数据库,提示插件采用的就是SQL Assistant,写起脚本来相当有效率.这段时间公司转型要采用MySQL数据库,试用了mysql workbench.mysql ...

  9. C++ Generate Rand Number Array by "srand()" 生成随机数

    在C++中,我们有时想生成一个由随机数组成的数组,而且随机数的范围也可由我们来设定.那么我们就要用到srand()函数配合rand()来使用,参见如下代码: #include <vector&g ...

  10. Qt 5.4 OpenCV 2.4.11 Win 32 Configuration

    Download CMake 2.8.2 Download OpenCV 2.4.11 Download Qt 5.4 Highly improtant note: The installation ...