博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq的分组功能
阅读量:7116 次
发布时间:2019-06-28

本文共 1905 字,大约阅读时间需要 6 分钟。

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 和orderby 是两个不同的概念,前者标识分组,后者标识排序。分组时如不特意制定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;

备注:自己的博客因为备案太烦被迫关闭,准备在博客园定居,一时难写成漂亮的页面格式,还请谅解。

原文地址:

转载地址:http://akwel.baihongyu.com/

你可能感兴趣的文章
3.VMware vsphere 5.0新体验-安装VMware Center
查看>>
趣题: 一道面试题的解法
查看>>
Java Scoket之java.io.EOFException解决方案
查看>>
Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…
查看>>
Android应用程序启动过程源代码分析(5)
查看>>
Linux桌面版横评:八、中标普华桌面Linux 3.0.1
查看>>
让UpdatePanel支持文件上传(5):支持页面重定向的HttpModule
查看>>
Java线程:新特征-阻塞栈
查看>>
CentOS 5.5升级内核到2.6.35.4
查看>>
查询整个数据库中某个特定值所在的表和字段的方法
查看>>
JS把数组中相同元素组合成一个新的数组问题
查看>>
《Linux内核设计与实现》读书笔记(三)- Linux的进程
查看>>
AngularJS快速入门指南08:表格
查看>>
C++矩阵运算库推荐
查看>>
在存储过程中编写正确的事务处理代码(SQL Server 2000 & 2005)
查看>>
Android 控件在布局中按比例放置[转]
查看>>
内核通知链 学习笔记 【转】
查看>>
Input Method of Win32 System
查看>>
count(*) VS count(X)
查看>>
MS ASP.Net Ajax 服务端扩展
查看>>