基本查询操作符-分组数组
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);