為IEnumerable介面新增增刪查等操作

2021-06-18 22:44:55 字數 1200 閱讀 3842

為ienumerable介面新增增刪查等操作,原因是ienumerable導航屬性更放心.

對ef開發來說,導航屬性肯定都用過,事實上,它是由vs ide工具根據你的資料庫關係結構自動生成的外來鍵屬性,在類檢視中可以看到相關屬性,它是以外鍵表名來標識的,如果是一對多的關係,那麼,它會為屬性加上icollection泛型集合用來標識,而今天我們要說的當然不是自動生成的,而是手動加的屬性,這樣屬性需要我們手動進行join,然後把它按需賦值,而使用include當然是無效的,呵呵。

一般地,我們習慣上把集合屬性定義為list,但是,對於linq to entities來說,這個東西並不是很受歡迎,而標準結果集大家都知道是ienumerable,它是所有集合的基類,自身只提供了集合遍歷的方法,這也是我們不用它作為導航屬性的原因,因為我們一般需要為導航集合賦值的,而使用ienumerable賦值就比較麻煩,需要借助list等集合。

引入ienumerable的原因主要是list無法實現乙個複雜的查詢,如圖:

這個查詢返回乙個派生型別,下面的複雜查詢將會用到上面的結果,而這時,list型別的導航屬性將是不被允許的

我們通過監視器可以看到,查詢返回的預設是ienumerable,所以,我們要屬性改為ienumerable,結果當然是正常的

而我們之前不用ienumerable的原因,就是因為它的方法太單調了,沒有新增,移除,查詢等方法,而這時,不用它又不行,所以,只能把它進行擴充套件了,呵呵

擴充套件方法如下:

///

///ienumerable介面的擴充套件方法,支援它的實現類是list的情況

/// public

static

class

ienumerableextensions

//////

從集合中刪除元素

/// ///

//////

public

static

void remove(this ienumerablecollection, t value)

//////

檢索集合中是否包含某個元素

/// ///

//////

///public

static

bool contains(this ienumerablecollection, t value)

}

呼叫也是十分簡單,和list型別的一樣樣,呵呵,舒服!

介面IEnumerable的使用例項

public class linkedlist ienumerable public linkedlistnode last public linkedlistnode addlast object node else return newnode public ienumerator getenu...

實現泛型IEnumerable介面

用c 實現乙個類的ienumerable介面時有兩種方法 1 實現非泛型ienumerable介面 2 實現泛型ienumerable t 介面。如果採用方法1,當集合元素t是值型別時,將涉及到巨多的boxing和unboxing操作。因此,理所當然地採用方法2 例如,以下 採用方法2實現列舉從指定...

陣列,集合,IEnumerable介面,迭代器

發展 陣列 集合 泛型 1 陣列 1.陣列資料結構是system.array類的乙個例項.2.system.array類的語法為 serializableattribute comvisibleattribute true public abstract class array icloneable...