您的位置:首页 > 其它

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: