zoukankan      html  css  js  c++  java
  • IQueryable接口与IEnumberable区别

    IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令。也是延迟在我要真正显示数据的时候才执行

    演示linq to ef中使用IEnumberable与IQueryable的区别,要用到的SQL Server Profiler工具

    下面是 IQueryable<T> :

    var student = (from s in stuEntities.Student
              orderby s.StudentID
                  select s).Skip(3).Take(3);

    生成的SQL:

    SELECT * FROM (
    select ROW_NUMBER() over(order by id)as row,* from [T_Scripts]
    )as t1 where t1.row > 3 and t1.row <= 6


    下面是 IEnumerable<T>:

    var student = (from s in stuEntities.Student
              orderby s.StudentID
                  select s).AsEnumerable().Skip(3).Take(3);

    生成的SQL:

    SELECT * FROM [T_Scripts]

    从上面的执行结果可以看出来, IQueryable 是先将所有LINQ语句转换成命令树,然后通过SQL执行
    而IEnumerable就是在 AsEnumerable 之前就立刻生成了SQL语句,后面再由程序Skip,Take

  • 相关阅读:
    (转)extern用法详解
    (转)extern用法,全局变量与头文件
    关于将数字转换成中文表达程序
    不用对战平台玩魔兽
    结构体内存对齐问题(转)
    今天碰到的很奇怪的问题
    99乘法表
    自我检讨
    收支簿
    掠夺论
  • 原文地址:https://www.cnblogs.com/xgao/p/4196114.html
Copyright © 2011-2022 走看看