C#中集合接口关系笔记
IEnumerable
IEnumerable接口是所有集合類型的祖宗接口,其作用相當于Object類型之于其它類型。如果某個類型實現了IEnumerable接口,就意味著它可以被迭代訪問,也就可以稱之為集合類型(可枚舉);
ICollection
ICollection繼承于IEnumerable接口,并且擴展了IEnumerable接口。
主要擴展的功能有:
新增了屬性Count,用于記錄集合元素個數
支持添加元素和移除元素
支持是否包含某元素
支持清空集合等等
對于任何實現了ICollection接口的集合,我們都可以通過第1條Count屬性獲取當前集合的元素數,所以這些集合也被稱為計數集合。
IList
IList接口直接繼承于ICollection接口和IEnumerable接口,并且擴展了通過索引操作集合的功能。
主要擴展的功能有:
通過索引獲取集合中某個元素
通過元素獲取元素在集合中的索引值
通過索引插入元素到集合指定位置
移除集合指定索引處的元素
IDictionary
IDictionary接口直接繼承于ICollection接口和IEnumerable接口,存儲的元素是鍵值對,擴展了通過鍵操作鍵值對集合的功能。
主要擴展的功能有:
通過鍵KEY獲取值VALUE
插入新的鍵值對{KEY:VALUE}
是否包含KEY
通過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#中集合接口关系笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intel优化12代酷睿CPU网页性能:
- 下一篇: 华为P50 Pro有5G了!中国联通首发