linq的各项高级查询
2015-09-24 15:34
169 查看
基本查询操作符-分组数组
GroupBy()
Public staticIEnumerable<IGrouping<TKey,TSource>>GroupBy
<TSource,>
例子如下:
private
voidbutton4_Click(object sender,
EventArgs e)
{
List<string>persons =
new List<string>();
persons.Add("zhang san");
persons.Add("li si");
persons.Add("wang wu");
persons.Add("er liu");
persons.Add("xu weili");
persons.Add("zhang jia yuan");
//按照姓名来分组--取出姓名中的空格前的部分
var result = persons.GroupBy(p => p.Split(new
char[] { ' ' })[0]);
foreach (var group
in result)
{
Console.WriteLine(""+ group.Key);
foreach (var name
in group)
{
Console.WriteLine("\t"+name);
}
}
}
查询执行的时机
1 获取数据源
2 定义查询
3 执行查询
定义查询后,查询知道需要枚举结果是才被真正的执行,这种方式成为“延迟查询”
当查询方法返回单一值时,查询立即执行
//查询时机--当返回值是单值时,马上执行语句,否则延迟执行
var result = persons.Select(p => p).Count();
Console.WriteLine("个数:"+result);
LINQ查询的两种凡是
1 基于方法的查询 Method Syntax
2 基于语句的查询 Query Syntax
查询语句 vs 查询方法
1, CLR本省并不能理解查询语句,它会通过编译器在编译的时候
把我们的语句翻译为查询方法
2, 大部分查询方法都有对应的查询语句形式:
如Select() 对应select、OrderBy()对应orderby
3,部分查询方法目前在C#中还没有对应的查询语句
所以尽量的优先使用语句 而不是方法
高级查询方法:
聚合类
Count,Max/Min,Avelage
排序类
Thenby
分区类
Take, TakeWhile, Skip, SkipWhile
集合类
Distinct
生成类
Range,Repeat
//高级方法
int[]arr={213,454,3,345,34,2323,23,5,343,212,12,343,3236,67,667};
var result = arr.OrderBy(p =>p.ToString().Substring(0, 1)).ThenBy(p=>p);//2次排序
Console.WriteLine(result);
// var result = from p in result orderby p descendingselect p;
//分区类
//var result = arr.Skip(3).Take(3);
var result = arr.SkipWhile(p => p > 4);//方法体部分是该linq语句不再往后执行的条件,当第一次遇到条件成立时,则取剩下所有的
//集合类
//var result = arr.Distinct();
//生成类--静态类
System.Linq.Enumerable.Range(0,10);
GroupBy()
Public staticIEnumerable<IGrouping<TKey,TSource>>GroupBy
<TSource,>
例子如下:
private
voidbutton4_Click(object sender,
EventArgs e)
{
List<string>persons =
new List<string>();
persons.Add("zhang san");
persons.Add("li si");
persons.Add("wang wu");
persons.Add("er liu");
persons.Add("xu weili");
persons.Add("zhang jia yuan");
//按照姓名来分组--取出姓名中的空格前的部分
var result = persons.GroupBy(p => p.Split(new
char[] { ' ' })[0]);
foreach (var group
in result)
{
Console.WriteLine(""+ group.Key);
foreach (var name
in group)
{
Console.WriteLine("\t"+name);
}
}
}
查询执行的时机
1 获取数据源
2 定义查询
3 执行查询
定义查询后,查询知道需要枚举结果是才被真正的执行,这种方式成为“延迟查询”
当查询方法返回单一值时,查询立即执行
//查询时机--当返回值是单值时,马上执行语句,否则延迟执行
var result = persons.Select(p => p).Count();
Console.WriteLine("个数:"+result);
LINQ查询的两种凡是
1 基于方法的查询 Method Syntax
2 基于语句的查询 Query Syntax
查询语句 vs 查询方法
1, CLR本省并不能理解查询语句,它会通过编译器在编译的时候
把我们的语句翻译为查询方法
2, 大部分查询方法都有对应的查询语句形式:
如Select() 对应select、OrderBy()对应orderby
3,部分查询方法目前在C#中还没有对应的查询语句
所以尽量的优先使用语句 而不是方法
高级查询方法:
聚合类
Count,Max/Min,Avelage
排序类
Thenby
分区类
Take, TakeWhile, Skip, SkipWhile
集合类
Distinct
生成类
Range,Repeat
//高级方法
int[]arr={213,454,3,345,34,2323,23,5,343,212,12,343,3236,67,667};
var result = arr.OrderBy(p =>p.ToString().Substring(0, 1)).ThenBy(p=>p);//2次排序
Console.WriteLine(result);
// var result = from p in result orderby p descendingselect p;
//分区类
//var result = arr.Skip(3).Take(3);
var result = arr.SkipWhile(p => p > 4);//方法体部分是该linq语句不再往后执行的条件,当第一次遇到条件成立时,则取剩下所有的
//集合类
//var result = arr.Distinct();
//生成类--静态类
System.Linq.Enumerable.Range(0,10);
相关文章推荐
- 如何加速您的Wordpress网站
- 问题:oracle LISTAGG 连接字符串;结果:Oracle 连接字符串的方法
- Windows传感器编程之获取传感器数据
- nginx日志切割
- 基本的Web控件三
- J2ee开发环境搭建之(三)eclipse集成JDK+Tomcat
- 使用Backbone.js开发Chrome便签插件
- 【转】Hibernate HQL 占位符【转】
- 设置tomcat的运行内存
- Linq技术1
- 3*n/2 - 2
- bootstrap modal 弹窗 数据清除
- 又十个超级有用的PHP代码片段
- 5、链接文件
- Android webView 使用postUrl注意事项
- 如何做好大型数据中心的运维
- Maven Web项目Servlet开发之登陆界面
- TP-登录
- uva 1637 - Double Patience
- 协程介绍