• LINQ进阶


    LINQ查询执行的时机

    查询分为以下三步:获取数据源、定义查询、执行查询;


    定义查询后,查询直到需要枚举结果时才被真正执行,这种方式称为“延迟执行(deferred execution)”;
    当查询方法返回单一值时,查询立即执行;
    因此,可以通过以下技巧在定义查询时就强制执行查询;

    LINQ查询的两种方式

    Method Syntax, 查询方法方式
    主要利用 System.Linq.Enumerable 类中定义的扩展方法和 Lambda 表达式方式进行查询
    Query Syntax, 查询语句方式
    一种更接近 SQL 语法的查询方式,可读性更好

    查询语句vs查询方法

    查询语句与查询方法存在着紧密的关系
    1、CLR(CLR是公共语言运行时,Common Language Runtime ,它负责资源管理(内存分配和垃圾收集), 
    并保证应用和底层操作系统之间必要的分离)本身并不理解查询语句,它只理解查询方法
    2、编译器负责在编译时将查询语句翻译为查询方法
    3、大部分查询方法都有对应的查询语句形式:如 Select() 对应 select 、 OrderBy() 对应 orderby
    4、部分查询方法目前在C#中还没有对应的查询语句:如 Count()和Max() 这时只能采用以下替代方案
      查询方法
      查询语句 + 查询方法的混合方式;
    5、一般情况下,建议使用可读性更好的查询语句

    练习:使用上一章的对象数组 foxRiver8,对 foxRiver8 中的对象按照先年龄后姓名方式排序
    使用查询语句实现
    使用查询方法实现

    高级查询方法
      聚合类
        Count,Max/Min,Average,sum
      排序类
        ThenBy
      分区类
        Take,TakeWhile,Skip,SkipWhile
      集合类
        Distinct
      生成类
        Range, Repeat

    使用生成类查询方法时,需要注意以下几点:
      1、和其他几类方法不同,Range/Repeat 不是扩展方法,而是普通的静态方法
      2、Range 只能产生整数序列
      3、Repeat 可以产生泛型序列
      4、所有的查询方法都存放在 System.Linq.Enumerable 静态类中

  • 相关阅读:
    强化学习 | D3QN原理及代码实现
    Airtest入门及多设备管理总结
    JS图片base64压缩
    ABP框架
    .net gof23种设计模式
    VS2013添加Socket
    VS2013用InstallShield打包winfrom项目
    .net core3.1 log4net无法写日志
    git commit 修改提交说明信息
    screen 使用总结
  • 原文地址:https://www.cnblogs.com/guosongORxiaosong/p/2922054.html
Copyright © 2020-2023  润新知