LINQ学习笔记

基础概念express

LINQ是微软推出的一项具备突破性的新特性——语言集成查询(Language Integrate Query),他在对象和数据间创建了一种对应关系,可使用访问内存对象的方式查询数据集合数组

在.NET类库中,LINQ相关类库都在System.Linq命名空间下,对于目前程序须要用到的是LINQ to Object,数据源为实现了接口IEumerable<T>或IQueryable<T>的内存数据集合,对于本程序也就是List<T>集合函数

LINQ查询的目的是从制定的数据源中查询知足符合特定条件的数据元素,而且根据须要对这些查询的元素进行排序、链接等操做,因此LINQ查询主要包括以下几个元素学习

数据源:表示LINQ将从哪里查找数据,一般是一个或多个数据集,数据集包含一系列元素,是一个类型为IEumerable<T>或IQueryable<T>的对象,能够对它进行枚举,遍历每个元素,元素能够是任意数据类型spa

目标数据:数据源中的数据并不都是查询所须要的结果,目标数据用来指定具体想要什么数据,在LINQ中,它定义了查询结果数据集中元素的具体类型对象

筛选条件:筛选条件定义了对数据源中元素的过滤条件,只有知足条件的原素材做为查询结果返回,帅选条件能够是简单的逻辑表达式表示,也能够用具备复杂逻辑的函数来表示排序

附加操做:表示一些其余的操做,好比排序、计算查询结果的最值和求和、对查询结果进行分组等接口

数据源和目标数据是必备元素,筛选和附加操做是可选元素ip

查询表达式内存

查询表达式是LINQ查询的基础,也是最经常使用的编写LINQ查询的方法。有查询关键字和对应的操做数组成的表达式总体

查询表达关键字

关键字

功能

from

指定要查找的数据源及范围变量,多个from字句则表示从多个数据源查找数据

select

指定查询要返回的目标数据,能够指定任何类型,甚至是匿名类型

where

指定元素的筛选条件,多个where子句则表示并列条件,必须所有都知足才能入选

orderby

指定元素的排序字段和排序方式,当有多个排序字段时,由字段顺序肯定主次关系,能够指定升序和降序两种排序方式

group

指定元素的分组字段

join

指定多个数据源的关联方式

from

每一个LINQ查询都是从from子句开始,其通常包括如下两个功能

制定查询将采用数据源

定义一个本地变量,表示数据源中单个元素

格式为from localVar in dataSource,通常不为localVar元素指定数据类型,由编译器自动分配类型

select

LINQ查询表达式必须以select或者group子句结束,格式以下

select element

element参数指定查询结果中元素的类型及初始化方式

要选择的目标数据不只能够为数据源中的元素,还能够是该元素的不一样操做结果,包括属性、方法和运算等

可使用匿名类型,进一步学习

where

格式以下

where expression

expression为一个逻辑表达式,可使用&&和||指定多个条件之间的逻辑运算关系

orderby

格式以下

orderby element [sortType]

默认是ascending

能够同时指定多个排序元素,也可为每一个排序元素制定独立的排序方式

 group

实现对查询结果的分组操做,经常使用格式以下

group element by key  

key表示分组条件,group子句返回类型为IGrouping< Tkey,TElement>的查询结果,能够看做一个内部嵌套List列表的Hashtable

若是须要对分组的结果进行排序,再次查询等操做,须要使用into关键字将Group的查询结果保存到一个临时变量,其格式为

group element by key into tmpGrp

join

经过join子句联接操做,能够未来自不一样源序列,而且在对象模型中没有直接联系的元素相关联,惟一的要求是每一个源中须要共享某个能够进行比较,以判断是否相等的值

能够实现三种联接:内部联接、分组联接、左右联接

内部联接

格式以下

join element in dataSource on exp1 equals exp2

exp1和exp2表示两个表达式,它们具备相同的数据类型

分组联接

join element in dataSource on exp1 equals exp2 into grpName

into表示将这些数据分组并保存到grpName中

左外部联接

LINQ查询方法

IEumerable<T>接口

主要方法有

数值运算:Sum,Average,Max,Min

元素数量Count,LongCount

取值:First,Last,ElementAt

提取子集:Skip,SkipWhile,Take,TakeWhile

集合操做:ReverseAll,Concat,Except,Intersect,Union,Distinct,SequenceEqual

其余:Any,Contains,ToArray,ToList…

Lambda表达式

基本格式

(input parameters)=>expression

parameters是一个参数列表,在Lambda表达式中只有一个输入参数时能够不用括号,不然括号是必须的,两个及以上参数用逗号隔离,没有参数时使用空括号表示

使用关键字对应方法进行一系列操做

相关文章
相关标签/搜索