zoukankan      html  css  js  c++  java
  • 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 静态类中

  • 相关阅读:
    nuget 命令行小技巧
    非静态类、方法、属性要实例化对象
    ViewData 和 ViewBag
    每日记载内容总结32
    每日记载内容总结31
    hibernate 学习知识总结
    spring mvc 页面编码和数据库编码 中文出现乱码
    java代码生成二维码以及解析二维码
    每日记载内容总结30
    换公司,重新开始
  • 原文地址:https://www.cnblogs.com/guosongORxiaosong/p/2922054.html
Copyright © 2011-2022 走看看