码迷,mamicode.com
首页 > 编程语言 > 详细

EF下怎么理解IEnumerable/ICollection/IQueryable?

时间:2020-04-19 13:09:59      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:插入   bsp   div   can   var   效率   情况   mamicode   mic   

IEnumerable

  • 最基本的列表容器,连列表项Count都不能获取
  • 允许遍历, 但不允许添加、删除、更新列表项
  • 支持使用where linq查询
  • 适合填充Grid展示及筛选

ICollection

  • IEnumerable 的扩展,增加了添加、删除、更新等操作
  • 可以获取列表项Count, 获得Count的算法复杂度为O(1)
  • 支持遍历、where等所有linq查询
  • 适合做类的导航属性,一般在一对多的计算中,可以通过它进行更新,删除等

IList

  • ICollection 的扩展,支持IEnumerable 和ICollection的所有操作
  • 支持更多列表项操作,如列表中插入和删除元素
  • 适合在方法体中做一些中间操作

IQueryable

  • 支持LINQ to SQL表达式查询,作用于数据库级别
  • 示例:var wantedP = from p in Parts where p.CanOperate==true select p;
  • 适合对Grid的各种查询排序等

技术图片

一般返回数据集合是用IEnumerable还是EQueryable呢?

IQueryable继承自IEnumerable,所以对于数据遍历来说,它们没有区别。

但是IQueryable的优势是它有表达式树,所有对于IQueryable的过滤,排序等操作,都会先缓存到表达式树中,只有当真正遍历发生的时候,才会将表达式树由IQueryProvider执行获取数据操作。

而使用IEnumerable,所有对于IEnumerable的过滤,排序等操作,都是在内存中发生的。也就是说数据已经从数据库中获取到了内存中,只是在内存中进行过滤和排序操作。

 所以在数据较多的情况下或者操作比较复杂的情况下,IEnumerable的效率会比IQueryable低很多,返回的结果集可以是IEnumerable(此结果集也应该是经过IQueryable各种组合后所得来的)

 

EF下怎么理解IEnumerable/ICollection/IQueryable?

标签:插入   bsp   div   can   var   效率   情况   mamicode   mic   

原文地址:https://www.cnblogs.com/firstcsharp/p/12730862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!