首页 > 其他分享 >.AsEnumerable()和.ToList()的区别

.AsEnumerable()和.ToList()的区别

时间:2023-05-11 14:13:31浏览次数:32  
标签:ToList 区别 IQueryable AsEnumerable get IEnumerable 内存

  • .AsEnumerable()延迟执行,不会立即执行。当你调用.AsEnumerable()的时候,实际上什么都没有发生。
  • .ToList()立即执行
  • 当你需要操作结果的时候,用.ToList(),否则,如果仅仅是用来查询不需要进一步使用结果集,并可以延迟执行,就用.AsEnumerable()/IEnumerable /IQueryable
  • .AsEnumerable()虽然延迟执行,但还是访问数据库,而.ToList()直接取得结果放在内存中。比如我们需要显示两个部门的员工时,部门可以先取出放置在List中,然后再依次取出各个部门的员工,这时访问的效率要高一些,因为不需要每次都访问数据库去取出部门。
  • IQueryable实现了IEnumberable接口。但IEnumerable<T> 换成IQueryable<T>后速度提高很多。原因:
  • IQueryable接口与IEnumberable接口的区别:  IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
  • IEnumerable跑的是Linq to Object,强制从数据库中读取所有数据到内存先。
复制代码
1 namespace System.Linq
 2 {
 3     public interface IQueryable : IEnumerable
 4     {
 5         Type ElementType { get; }
 6
 7         Expression Expression { get; }
 8
 9         IQueryProvider Provider { get; }
10     }
11
12     public interface IQueryable<out T> : IEnumerable<T>, IQueryable, IEnumerable
13     {
14     }
15 }
 

标签:ToList,区别,IQueryable,AsEnumerable,get,IEnumerable,内存
From: https://www.cnblogs.com/itjeff/p/17390848.html

相关文章

  • 【MIPS汇编】ADDI,ADDIU,ADD,ADDU的区别、有符号无符号的谬误
    介绍ADDI、ADDIU:加立即数,区别在于是否检测溢出。Format:ADDIrt,rs,immediatert=rs+immediateToaddaconstanttoa32-bitinteger.Ifoverflowoccurs,thentrap.Format:ADDIUrt,rs,immediatert=rs+immediateToaddaconstanttoa32-bitinteg......
  • truncate和delete的区别
    truncate和delete的区别在于四个方面:1.条件删除、2.事务回滚、3.清理速度、4.高水位重置。因为delete是可以带WHERE的,所以支持条件删除;而truncate只能删除整个表。1.条件删除这个比较好理解,因为delete是可以带WHERE的,所以支持条件删除;而truncate只能删除整个表。2.事务......
  • C语言中.与->的区别
    (一)基础结构体用点,结构体指针用箭头。a->b 的含义是 (*a).b 。  现代的标准化的C语义上来说, -> 可以用 * 和 . 的组合实现。简单的说,就是一个快捷方式,一个语法糖。(二)例子在机器码和汇编的角度来看,不存在变量,不存在struct这种东西,只存在寄存器和一个叫做内存的......
  • location.href和location.replace的区别
    情景比如支付过程中或者使用商品的优惠券,而使用这张优惠券需要取请求一个第三方的地址,中间会有一次跳转。若使用window.location.href=“url”,按流程操作是没问题的,但是如果用户点击返回,则无法跳回原本的提交订单的页面,会一直进行重复请求,造成程序出错。所以,必须替换成wind......
  • 互联网、因特网和万维网的区别
    互联网、因特网和万维网的区别互联网互联网的定义比较多样。目前最权威的定义是现行的通信名词术语标准(GB/T32402-2015【正版】通信名词术语数据通信因特网),里面对互联网的定义是“由多个计算机网络相互连接而成的网络,它是在功能和逻辑上组成的一个大型网络”。这和英文的inte......
  • 接口继承和抽象类继承区别以及普通类和抽象类做基类的区别
    接口继承和抽象类继承区别C#中接口和抽象类都可以用于实现继承,但是它们有一些重要的区别。接口是一种行为规范,它只规定了类应该包括哪些方法,但是没有提供任何实现细节,因此实现接口的类必须提供所有规定的方法实现;抽象类是一种半成品类,它可以包含实现代码以及其他抽象方法,子类必......
  • JS中some和every的区别和用法
    some和every是数组中迭代的方法相同点:some和every都有三个参数,即item→当前项,index→当前的索引值,array→数组本身;都可以遍历数组不同点:some相当于逻辑关系中的或,只要有一个参数满足条件,则中断遍历,返回true,如果遍历完所有参数,没有找到符合的项,即返回false;every相当于关系中的且,......
  • count(*)、count(1)、count(列名)有什么区别
    转载:https://juejin.cn/post/6854573219089907720https://juejin.cn/post/7152086171244298254......
  • openai模型个性化训练Embedding和fine-tuning区别
    现在基于自然语言和文档进行对话的背后都是使用的基于嵌入的向量搜索。OpenAI在这方面做的很好,它的Cookbook(github.com/openai/openai-cookbook)上有很多案例,最近他们对文档做了一些更新。GPT擅长回答问题,但是只能回答它以前被训练过的问题,如果是没有训练过的数据,比如一些私有数据......
  • 常量指针和指针常量的区别
     定义变量inta=1;intb=2; 常量指针:顾名思义,指向常量的指针(apointertoconstint),不能通过该指针修改变量的值(不通过该指针仍然可以修改)constint*p1=&a; // *p1为const,即指针指向的值为const*p1+=1;  // 错误,试图通过p1修改a的值p1=&b;   ......