LINQ之查询语法

新开一节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引用新查询的结果

这是我的公众号二维码,获取最新文章,请关注此号

原文地址:https://www.cnblogs.com/charlesmvp/p/13514323.html