Linq分组功能

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;

 转一下自己的文章

时间: 2024-08-05 03:55:51

Linq分组功能的相关文章

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

UItableView分组功能 1 class UITableViewControllerGroup: UIViewController, UITableViewDataSource, UITableViewDelegate { 2 3 var titleString:String! 4 5 @IBOutlet var titleLabel:UILabel! 6 @IBOutlet var listTableView : UITableView! 7 8 9 //索引字母数组 10 var ar

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

引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用."Tiles"提供了一个简单易用,平铺方式来组织内容显示.Windows8的开始菜单是最典型的GridView 示例."开始菜单"显示了系统中安装的所有应用程序,而且支持重新排列. 本文源于我们项目的开发人员,他们想在项目中提供与GridView相同的用户体验,想要创建类GridView控件

正则表达式中分组功能高级用法

通过将部分正则表达式用括号括住来实现分组捕获的用法大部分人都很熟悉,如/.+(\d+).+/捕获字符串中的所有数字部分,然后通过组号就可以抽取出各分组匹配的字符文本或者通过反向引用的方式对分组中的文本进行替换.但是除了不同的分组用法以外,正则表达式引擎还提供了一些高级的分组功能,下面介绍部分比较常用的特殊分组: 1.非捕获分组( non-capturing group) 使用语法:(?:regex)这里的?和:都是语法的组成部分:这种分组正则表达式引擎不会捕获它所匹配的内容即不会为非捕获型分组分

sed 使用扩展正则式的分组功能进行替换

以下命令使用sed的扩展正则式的分组功能进行替换,-r参数启用扩展正则式支持 sed -r -i 's/(PASS_MAX_DAYS)\s+([0-9]+)/\1 90/' /etc/login.defs 这条命令将/etc/login.defs文件的行 PASS_MAX_DAYS 99999 替换为 PASS_MAX_DAYS 90 以下正则式支持分组功能,()表示一个分组 (PASS_MAX_DAYS)\s+([0-9]+) 将PASS_MAX_DAYS放在分组1中,[0-9]+匹配任意多个

Linq分组,linq方法分组

Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均值等. Linq中的Groupby方法也有这种功能.具体实现看代码: 假设有如下的一个数据集: view sourceprint? 01.public class StudentScore 02.{ 03.public int ID { set; get; } 04.public string Name { set; get; } 05.public string Course { set; get; } 06.publi

Linq分组合并

有一个List,要求按日期分组,将同一天的数据组合起来,用Linq实现. namespace ConsoleApplication1 { class Program { static void Main(string[] args) { List<Student> students = new List<Student>() { new Student(){ ID = 1 , Name ="guwei1", BirthDay=DateTime.Now.AddHo

发现Navivat for MySQL有一个数据表分组功能,用起来很方便!

今天用Navivat for MySQL时,发现原来Navivat for MySQL还有这样一个功能,可以对数据表进行分组,这样找起表来就方便多了.一直用SQL Server的时候就希望能有这样的功能,大量的表都混在一起确实很让人抓狂,能有个标记或者分组这样多好,微软也多学习一下.

ArrayList实现分组功能

这边只用2个属性来进行分组 定义Object有key与value属性 按照key的不同对于arrayList进行分组 List<Object> tempList=new ArrayList<>(); tempList=service.queryObjectLidtByObject(object); Map<String,String> map=new HashMap<String,String>(); //将集合分组 for(int k=tempList.s

Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据

转载:http://www.cnblogs.com/zq281660880/archive/2012/09/26/2704836.html 今天在使用linq处理一下需求时碰到一点小问题,特此记录. 需求: 按照品名相同的进行汇总,数量相加.表号按分号分割显示 1.组织测试数据表 DataTable tableA1 = new DataTable(); tableA1.Columns.AddRange(new DataColumn[] { new DataColumn("品名"), n