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. mysql练习(增删改查)char、int使用

    (4)char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节:而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode ...

  2. linux chrome rpm chrome浏览器下载(ver 63-70)

    我的github chrome下载地址:https://github.com/chen1932390299/python 国内开源的资源 chrome下载centos 的:https://www.ch ...

  3. vue 中 限制 input 输入数字、小数位数等

    限制小数位数 <input type="number" @keydown="handleInput2" placeholder="请输入或查看& ...

  4. (2)Linux Java环境变量安装

    install default JRE/JDK Installing Java with apt-get is easy. First, update the package index: sudo ...

  5. 源代码管理工具(1)——SVN(1)——SVN 的使用新手指南,具体到步骤详细介绍----TortoiseSVN

    一.客户端的使用: TortoiseSVN(下载地址:https://pan.baidu.com/s/14cAEV5ZfMA9mLlQAb4oznw 这里有包含中文版的语言包). 1.先下载安装(这个 ...

  6. mysql修改字符集为utf8

    https://zhidao.baidu.com/question/1642165712897935220.html

  7. mqtt.mini.js 使用

    html文件里直接调用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  8. java中对于多态的一个实例分析

    首先来看这样的一段代码,其中对于类的定义如下: class Parent{ public int myValue=100; public void printValue() { System.out. ...

  9. debezium、kafka connector 解析 mysql binlog 到 kafak

    目的: 需要搭建一个可以自动监听MySQL数据库的变化,将变化的数据捕获处理,此处只讲解如何自动捕获mysql 中数据的变化 使用的技术 debezium :https://debezium.io/d ...

  10. GCC 升级

    1.下载源码 wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz 2.下载依赖包编译安装 GCC 需要依赖 mpc,mpfr,gmp包. ...