Linq是C#和VB.net中的一种查询语言,Linq是一个以用途目的为导向,而不是指令式的语言,因此比较人性化。

下面是Linq学习和使用的一些总结,希望对大家也有点帮助。

函数形式和查询语句形式
Linq语言包含两种形式,一种是Linq的特有查询语言,一种是函数形式的。函数形式是补充的功能,而特有形式是一般常用的功能。所有的特有形式,都有对应的函数形式。Linq的特有查询形式,实际上是一种语法糖。

立即执行和延迟执行
Linq有两种执行模式,一种是立即执行,一种是延迟执行。延迟执行本质上相当于匿名函数,你写了一个匿名函数的函数体,不代表你会立刻调用,只有当你调用的时候,才会执行。

流式和非流式
Linq对数据处理采用了两种模式,一种是一个接一个元素进行单独处理,这称为流式;一个是整体处理,这叫非流式。Linq为了优化性能,采用了要多少数据就实际读取多少数据的策略,应该还是比较好理解的。

Linq标准查询函数分类列表

聚合操作
Aggregate( Func< 聚合值, 下一个元素, 返回聚合值> ) : 根据特定函数执行聚合操作(聚合就是累计吧)

Average序列的平均值.

Count序列元素个数或者满足指定条件的元素个数.

LongCount返回元素个数(结果类型为Int64,也就是支持范围比较大)

Sum 累计.

排序操作
OrderBy 将序列升序.以非流式方式工作.该操作不查询数据.

OrderByDescending 将序列降序.以非流式方式工作.该操作不查询数据.

Reverse 反转序列.以非流式方式工作,该操作不查询数据.

ThenBy 对排序结果再次进行升序.以非流式方式工作,该操作不查询数据.

ThenByDescending 对排序结果再次进行降序.以非流式方式工作,该操作不查询数据.

集合操作
Concat 串联两个序列.该操作不查询数据.

Except 左集合减右集合的结果.右集合以非流式方式工作.该操作不查询数据.

Intersect 交集.右集合以非流式方式工作.该操作不查询数据.

Union 并集.该操作不查询数据.

筛选操作
Distinct 返回非重复元素组成的新序列.该操作不查询数据.

First返回第一个元素或符合条件的第一个元素.

FirstOrDefault 返回第一个元素或符合条件的第一个元素.如没有返回默认.

Max返回序列中最大的元素.

Min 返回序列中最小的元素.

Last返回最后一个元素或最后一个符合条件的元素.

LastOrDefault 返回最后一个元素或最后一个符合条件的元素.如没有返回默认.

Single返回唯一元素,或符合条件的唯一元素,如有多个报异常.

SingleOrDefault 返回唯一元素,或符合条件的唯一元素或默认值,如有多个报异常.

Where 条件筛选.该操作不查询数据.

判断操作
All(Func< 下一个元素>, 返回是否符合条件> ) : 测试序列是否都满足条件

Any 是否存在元素或是否存在符合条件的元素.

Contains是否包含指定元素.

SequenceEqual比较两序列是否相等.

联接投影分组操作
Select 序列每个元素根据转换函数产生投影.该操作不查询数据.

SelectMany 序列每个元素根据转换函数产生序列投影(一对多),最后串联所有投影序列.该操作不查询数据.

GroupBy 按指定键分组序列.以非流失方式工作.该操作不查询数据.

GroupJoin 近似左联接.右集合以非流式方式工作.该操作不查询数据.

Join 内联接.右集合以非流式方式工作.该操作不查询数据.

ToLookup 返回一对多的字典.

范围选择操作
ElementAt返回指定位置的元素.

ElementAtOrDefault 返回指定位置的元素.当该位置没有返回默认.

Skip 跳过指定数目的元素,返回剩余元素组成的序列.该操作不查询数据.

SkipWhile 跳过元素,直到条件不符合,返回剩余元素组成的序列.该操作不查询数据.

Take 返回指定个数的元素组成的序列.该操作不查询数据.

TakeWhile 返回元素序列,直到条件不符合.该操作不查询数据.

生成操作
DefaultIfEmpty 如果是空序列,就返回一个默认或指定元素的新序列. 该操作不查询数据.

Empty返回空序列.

Range 生成一个整数升序序列.该操作不查询数据.

Repeat 生成一个指定值的序列.该操作不查询数据.

转换操作
AsEnumerable 返回标准查询接口(非子类的特定接口). 该操作不查询数据.

AsQueryable 返回IQueryable接口.该操作不查询数据.

Cast 返回标准查询接口,将元素类型强制转换,常用于非泛型序列.该操作不查询数据.

OfType 返回标准查询接口,将元素类型进行转换,如不能转换就放弃该元素,常用于非泛型序列.该操作不查询数据.

ToArray返回数组.

ToDictionary返回字典.

ToList 返回列表.