zoukankan      html  css  js  c++  java
  • 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引用新查询的结果

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

  • 相关阅读:
    条形码识别
    使用边缘检测,将图像旋转到水平位置
    pyzbar 安装
    关于跑别人代码中遇到的问题
    %matplotlib inline
    git 相关流程和报错解决
    原码、反码和补码
    opencv 图像resize
    前端跨域解决方案汇总
    vuecli3 引入构建版本的2种方式
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13514323.html
Copyright © 2011-2022 走看看