• C#中集合接口关系笔记


    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 的操作并没有查询数据,而是延迟查询

    要有多努力才能对得起奔波的脚步和身上的期望
  • 相关阅读:
    Servlet 易错点和注意点
    Spring 完成自动注入(autowire)
    Java 定时调度Timer&Quartz
    常用Linux命令杂记
    Spring 使用AOP——基于注解配置
    Spring 使用AOP——xml配置
    Spring 使用纯注解方式完成IoC
    Spring 简单使用IoC与DI——XML配置
    让多个HTML页面 使用 同一段HTML代码
    Feture、ListenableFuture、ComplatableFuture
  • 原文地址:https://www.cnblogs.com/hxfcodelife/p/9955402.html
Copyright © 2020-2023  润新知