IEnumerable

IEnumerable接口是所有集合类型的祖宗接口,其作用相当于Object类型之于其它类型。如果某个类型实现了IEnumerable接口,就意味着它可以被迭代访问,也就可以称之为集合类型(可枚举);

ICollection

ICollection继承于IEnumerable接口,并且扩展了IEnumerable接口。

主要扩展的功能有:

  1. 新增了属性Count,用于记录集合元素个数

  2. 支持添加元素和移除元素

  3. 支持是否包含某元素

  4. 支持清空集合等等

对于任何实现了ICollection接口的集合,我们都可以通过第1条Count属性获取当前集合的元素数,所以这些集合也被称为计数集合。

IList

IList接口直接继承于ICollection接口和IEnumerable接口,并且扩展了通过索引操作集合的功能。

主要扩展的功能有:

  1. 通过索引获取集合中某个元素

  2. 通过元素获取元素在集合中的索引值

  3. 通过索引插入元素到集合指定位置

  4. 移除集合指定索引处的元素

IDictionary

IDictionary接口直接继承于ICollection接口和IEnumerable接口,存储的元素是键值对,扩展了通过操作键值对集合的功能。

主要扩展的功能有:

  1. 通过键KEY获取值VALUE

  2. 插入新的键值对{KEY:VALUE}

  3. 是否包含KEY

  4. 通过KEY移除键值对元素

=======================================================

当我们使用到EF时,不得不说 IEnumerable(集合) 和 IQueryable(EF里的DbSet<T>) 里的 SQO 本质不一样!:

集合 的 标准查询运算符 方法 ,是来自于 System.Linq.Enumerable 里 给 IEnumerable 接口添加的扩展方法

EF上下文里的 DBSet<T> 里的 标准查询运算符 方法,来自于 System.Linq.Queryable 里给 IQueryable接口 添加的扩展方法

EF的集合中采用IQueryable接口原因是,延迟加载,也就是我们查询出来的并不是集合而是

IQueryable<UsersAddress> addrs = db.UsersAddresses.Where(a => a.udUId == 1);   //以接口的方式返回

之所以返回一个接口,而不是具体的数据集合,因为我们并不知道后面是否还有查询条件,所以采用这种方式去拼接查询条件,如:

addrs.Where(a=>a.mIsDel==fales);

这个时候返回的还是接口,还是在拼接条件,并没有生成sql语句去数据库查询,当我们使用到了集合中的变量时或者使用 addrs.ToList();

就会生成SQL语句真正的去数据库查询数据。

IEnumerable 又叫做本地查询,因为就是在本地内存中的数据集合,IQueryable 的操作并没有查询数据,而是延迟查询

C#中集合接口关系笔记的更多相关文章

  1. java中集合部分的笔记

    集合类框架概要Collection<E> boolean removeIf(Predicate<? super E> filter)//删除满足条件的元素,如果Collecti ...

  2. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  3. JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

    前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...

  4. java中map接口hashMap以及Enty之间的用法和关系

    java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...

  5. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  6. Android编程权威指南笔记3:Android Fragment讲解与Android Studio中的依赖关系,如何添加依赖关系

    Android Fragment 当我在学习时,了解了Fragment词汇 Fragment是一种控制器对象,我就把所了解的简单说一下.activity可以派fragment完成一些任务,就是管理用户 ...

  7. Java 中的集合接口——List、Set、Map

    Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组 ...

  8. c#中常用集合类和集合接口之集合类系列【转】

    常用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合类系列:http://www.cnblogs.com/fengxiaoji ...

  9. [知了堂学习笔记]_集合接口list与集合接口set的区别

    在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口. 今天我们就来谈谈List集合接口与Set集合 ...

随机推荐

  1. nginx-cache

    test.conf proxy_cache_path cache levels=1:2 keys_zone=my_cache:10m; server { listen 80; server_name ...

  2. WEB - Autoescaping, escaping, escape(转义)

    定义 参考Flask的文档http://flask.pocoo.org/docs/1.0/templating/#controlling-autoescaping 转义就是将> <这些在H ...

  3. Python - 协议和鸭子类型

    参考: Fluent_Python - P430 wiki 这里说的协议是什么?是让Python这种动态类型语言实现多态的方式. 在面向对象编程中,协议是非正式的接口,是一组方法,但只是一种文档,语言 ...

  4. VScode使用入门

    使用命令行打开 vscode 如何获取code命令 一般来说,当windows安装了vscode之后,重启之后就可以使用 code 这个命令 也可以直接将vscode直接加入到环境变量中进行使用 命令 ...

  5. django 中url与path小记

    1. 在django 2.0中增加了一些新的特性 更简单的URL路由语法 (Simplified URL routing syntax) admin应用的针对移动设备的优化改进(Mobile-frie ...

  6. Jmeter调度器小记

    jmeter的调度器中[持续时间(秒)]的优先级是高于[结束时间]和[启动时间]的 举例子: 前提:[循环次数]勾选[永远] 场景1:[持续时间(秒)]设置为120S,[启动时间]设置T+1min,[ ...

  7. 吴裕雄--天生自然TensorFlow2教程:反向传播算法

  8. 这里是常见的HTTP状态码

    遇到过的HTTP状态码 200(Ok):请求成功,服务器成功返回网页. 403(Forbidden):服务器已经理解请求,但是拒绝执行它. 404(Not Found):请求失败,请求所希望得到的资源 ...

  9. 杭电 1059 Dividing

    Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  10. 虚拟机设置固定IP从而使同一局域网可以访问

    没有ifcfg-eth0 时:https://www.cnblogs.com/itboxue/p/11186910.html (1)关机,将网络模式设置成桥接模式 (2)开机 进入 cd /etc/s ...