• C#高级编程(第9版) 第11章 LINQ 笔记


    概述
    语言集成查询(Language Integrated Query, LINQ)在C#编程语言中集成了查询语法,可以用相同的语法访问不同的数据源。
    LINQ提供了不同数据源的抽象层,所以可以使用相同的语法。

    本章介绍LINQ的核心原理和C#中支持C#LINQ查询的语言扩展。

    列表和实体
    LINQ查询
    eg:
    var query =   from r inFormua1.GetChampions()
    where r.Country == "Brazil"
    orderby r.wins descending
    select r;
    子句form、where、orderby、descending和select都是这个查询中预定义的关键字。
    查询表达式必须以from子句开头,以select或group子句结尾。这两个子句之间,可以使用where、orderby、join、let和其它from子句。
    query变量只是制定了LINQ查询。该查询不是通过这个赋值语句执行的。只要使用foreach循环访问查询,该查询就会执行。

    扩展方法
    编译器会转换LINQ查询,以调用方法而不是LINQ查询。
    LINQ为IEnumerable<T>接口提供了各种扩展方法,以便用户实现了该接口的任意集合上使用LINQ查询。
    扩展方法可以将方法写入最初没有提供该方法的类中。还可以把方法添加到实现某个特定接口的任何类中,这样多个类就可以使用相同的实现代码。

    定义LINQ扩展方法的一个类是System.Linq命名空间中的Enumerable。只需要导入这个命名空间,就打开了这个类的扩展方法的作用域。

    推迟查询和执行
    在运行期间定义查询表达式时,查询就不会运行,查询会在迭代数据项时运行。
    扩展方法Where()使用yield return语句返回谓词为true的元素。因为使用了yield return语句,所以编译器会创建一个枚举器,在访问枚举中的项后,就返回它们

    标准的查询操作符
    下表列出了Enumerable类定义的标准查询操作符:

     

    筛选
    并不是所有的查询都可以用LINQ查询方法完成。也不是所有的扩展方法都映射到LINQ查询子句上。
    高级查询使用扩展方法。

    用索引筛选
    不能使用LINQ查询的一个例子是Where()方法的重载。
    在Where()方法的重载中,可以传递第二个参数 ----- 索引。
    索引是筛选器返回的每个结果的计数器。

    类型筛选
    可以使用OfType()扩展方法,基于类型进行筛选。

    复合的from子句
    C#编译器把复合的from子句和LINQ查询转换为SelectMany()方法。

    排序
    分组
    对嵌套的对象分组
    内连接
    左外连接
    组连接
    结合操作
    合并
    分区
    聚合操作符
    转换操作符
    生成操作符

    并行LINQ
    System.Linq命名空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上。
    尽管Enumerable类给IEnumerable<T>接口定义了扩展方法,但ParallelEnumerable类的大多数扩展方法是ParallelQuery<TSource>类的扩展。

    并行查询
    分区器
    取消


    表达式树
    在LINQ to Objects中,扩展方法需要将一个委托类型作为参数,这样就可以将lambda表达式赋予参数。lambda表达式也可以赋予Expression<T>类型的参数。C#编译器根据类型给lambda表达式定义不同的行为。如果类型是Expression<T>,编译器就从lambda表达式中创建一个表达式数,并存储在程序集中。这样,就可以在运行期间分析表达式树,并进行优化,以便于查询数据源。


    LINQ提供程序
    .NET包含几个LINQ提供程序。
    LINQ提供程序为特定的数据源实现了标准的查询操作符。


    小结
    本章讨论了LINQ查询和查询所基于的语言结构,如扩展方法和lambda表达式,还列出了各种LINQ查询操作符,不仅用于筛选数据源,给数据源排序,还用于执行分区、分组、转换、连接等操作。
    使用并行LINQ可以轻松地并行化运行时间较长的查询。
    另一个重要的概念是表达式树。
    表达式树允许在运行期间构建对数据源的查询,因为表达式树存储在程序集中。

    还可以下载其它第三方提供程序,例如: LINQ to MySQL、LINQ to Amazon、LINQ to Flickr、LINQ to LDAP和LINQ to SharePoint等。无论使用什么数据源,都可以通过LINQ使用相同的查询语法进行操作。

  • 相关阅读:
    C++内嵌汇编代码,简单文件加密
    汇编查看StackFrame栈帧
    cdecl和stdcall调用约定-汇编演示
    汇编获取键盘输入,及改变文本颜色
    XLAT转码:以DS:【BX+AL】为地址,提取存储器中的一个字节再送入AL
    应中DOS中断显示字符串(摘自《汇编语言》王爽)
    汇编显示彩色字
    汇编ASCII大小写转换(字符串长度$的用法)
    SQLite.net发布后找不到"SQLite.Interop.dll"的问题
    linux使用shutdown.sh命令关闭不完tomcat进程的处理方法
  • 原文地址:https://www.cnblogs.com/crazytomato/p/7447932.html
Copyright © 2020-2023  润新知