新开一节LINQ的入门讲解。
LINQ(Language Integrated Query)语言集成查询,是C#语言的扩展,它的主要功能是从数据集中查询数据,就像通过sql语句从数据库查询数据一样(本节讲的linq查询语法跟sql语法也是类似),LINQ将这一形式实现在了C#中,熟悉JAVA的同学,LINQ就是JAVA中的StreamAPI。
下面先看一个例子:
int[] vs = { 1, 2, 3, 4, 5 }; var a = from v in vs where v > 2 select v; foreach (var t in a) { Console.Write(t); }
运行结果为:
以上代码的目的是输出数组中大于2的值,第2-4行就是我们本节要讲的LINQ查询语法。它们很像sql语句,其实并不是,from,where等是C#中的关键字,但可以稍微使用sql来理解这种形式。
使用var这个关键字来保存这个linq逻辑,当然也可以理解为var保存了数据,但这并不准确,其实linq中存在一种延迟查询的机制,当我们在调用foreach循环的时候,才会真正执行linq逻辑去查询数据,在没有调用foreach之前,内存中是没有查询到的数据的,注意,foreach不属于linq,它只是用来展示结果。
from
对于一个可枚举的数据(即继承了IEnumerable接口),可以进行linq查询,使用from 变量名 in 数据源 的形式(from必须作为开头),定向一个查询,以上述代码为例,变量v代表数组vs中的每一个数据,它类似foreach括号里的代码,这表明,将来会一个个遍历数组里边的数据,定义变量名是为了供后续的限定查询使用。
where
where就很容易理解,跟sql语句的语法一样,用于筛选数据,它可以用于任意的布尔表达式上,对于结果为true的数据进行归并,它是可选的,但是我们一般都会用到,没有where,返回的永远都是所有数据。
select
select用于指定结果集中包含哪些数据,也可以理解为将查到的数据返回出去,它是必要的,如果是查询对象的集合,可以通过select指定返回对象的某个属性值,这也是select重要的原因。
group
group用于分组数据,对于一个linq查询,总要以select或者group 结尾,group要配合by ,语法为group 分组对象 by 分组依据 现在将以上代码改写一下,看一下group具体用法:
int[] vs = { 1, 2, 3, 4, 5 }; var a = from v in vs where v > 1 group v by v > 3; foreach (var t in a) { foreach (var i in t) { Console.Write(i); } Console.WriteLine(); }
运行结果为:
将结果分组,大于3的一组,小于3的一组,结果是一个二维数组。
其它
LINQ共有50个查询关键字,下面列举其它的一些常用查询语法,欲了解更多语法,请查阅相关文档。
join…in…on…equals... | 关联多个数据源关联多个数据源 |
let | 标识存储子表达式的结果变量 |
orderby、descending | orderby 标识的变量升序显示,变量名后加descending标识降序 |
into | into后可以新开一个查询,通过into引用新查询的结果 |
这是我的公众号二维码,获取最新文章,请关注此号