当前位置 主页 > 服务器问题 > Linux/apache问题 >

    详解LINQ入门(上篇)

    栏目:Linux/apache问题 时间:2019-12-17 15:59

    前 言

    最近和我们老大一起做技术面试(我是旁听的),发现前来面试的没几个掌握甚至是丁点了解LINQ。这让我很纳闷,LINQ伴随2008一起发布至今难道大家真的没时间去了解一下或者学习一下这个应用基础吗。甚至问及有些人LINQ是什么,答题者想都不想 LINQ TO SQL, 崩溃!没错,LINQ是可以TO SQL,但是除了SQL,LINQ就无所作为了?非也。因此在这里和大家一起分享学习LINQ。本文适合以下读者, 如果你是不符合者请赏脸捧个场,3Q

    从未触碰过LINQ的 对LINQ有过了解但是从未实战过的 打算学习LINQ的

    简 介

    LINQ 是什么?引用官方术语“语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET work 3.5 版中引入的一项创新功能,它在对象领域和数据领域之间架起了一座桥梁。” 那么LINQ给我们带来了什么,请看以下例子:

    问:有序列A=int[]{1,2,3,4,5,6,7,8,0}; B=int[]{2,4,7,8,9}。请求出包含A和B共同值的序列C。

    如果按照原来的思路,那么编码也许如下:

    说明: 

    List<int> c = new List<int>();
    foreach(int a in A){
    
      foreach(int b in b) {
    
        if (a==b) {
          c.add(a);
        }
    
      }
    
    }
    
    

    说明: 

    是不是觉得上面这段虽然没什么问题,但是很丑陋。如果我们引用LINQ来编写呢:

    IEnumerable<int> C = from a in A
               from b in B
               where a==b
               select a;

    语 法

      1. LINQ所处在的主要命名空间:System.Linq

      2. LINQ的处理的核心对象就是IEnumerable可枚举对象也包括了泛型枚举,换句话说当你要处理的对象为IEnumerable类型对象时即可使用LINQ操作它。且在没有经过其他处理的情况下将返回一个新的IEnumerable序列,注意LINQ有一个特性“延迟加载”这个将在后续说明。

          3. 关键字(摘自MSDN):  

        from :      指定数据源和范围变量(类似于迭代变量)。

        where:     根据一个或多个由逻辑“与”和逻辑“或”运算符(&& 或 ||)分隔的布尔表达式筛选源元素。

        select:    指定当执行查询时返回的序列中的元素将具有的类型和形式。

        group:    按照指定的键值对查询结果进行分组。

        into:       提供一个标识符,它可以充当对 join、group 或 select 子句的结果的引用。

        orderby: 基于元素类型的默认比较器按升序或降序对查询结果进行排序。

        join:       基于两个指定匹配条件之间的相等比较来联接两个数据源。

        let:         引入一个用于存储查询表达式中的子表达式结果的范围变量。

        in:          join 子句中的上下文关键字。

        on:         join 子句中的上下文关键字。

        equals:   join 子句中的上下文关键字。

        by:         group 子句中的上下文关键字。

        ascending:orderby 子句中的上下文关键字。

        descending:orderby 子句中的上下文关键字。

      4. 语法说明,每个LINQ语句都以from作为开头,以select作为结束,这点和T-SQL语法不通的切记先入为主的思考。其他关键字如where则类似T-SQL作为筛选判断条件。