SelectMany 和 Select的區別

2022-04-05 00:11:10 字數 928 閱讀 2461

如果我們看這兩個擴充套件函式的定義很容易明白——select

是把要遍歷的集合

ienumerable

逐一遍歷,

每次返回乙個t

,合併之後直接返回乙個ienumerable

,而selectmany

則把原有的集合

ienumerable

每個元素遍歷一遍,

每次返回乙個ienumerable

,把這些ienumerable

的「t」

合併之後整體返回乙個

ienumerable

。因此我們可以說一般情況下selectmany

用於返回乙個

ienumerable>的「

巢狀」返回情況(把每個

ienumerable

合併後返回乙個整體的

ienumerable

)。因此在巢狀的時候往往可以節省**,例如輸出帶有以下的集合:

listint>> numbers = new listint>>(),  

new list,

new list

};

通常情況下要遍歷乙個巢狀的陣列,我們不得不採用二重迴圈(for

或者foreach

),不過現在我們可以借助

selectmany

進行簡化處理(把每個內嵌的

list

取出,因為每乙個

list

都是ienumerable

,合併成乙個大的

ienumerable

)。簡化如下:

var result = numbers.selectmany(collection=>collection);

foreach(var item in

result)

SelectMany 和 Select的區別

如果我們看這兩個擴充套件函式的定義很容易明白 select是把要遍歷的集合ienumerable逐一遍歷,每次返回乙個t,合併之後直接返回乙個ienumerable,而selectmany則把原有的集合ienumerable每個元素遍歷一遍,每次返回乙個ienumerable,把這些ienumera...

SelectMany簡單應用

示例 現有資料庫表person和dog,人和狗是1對多的關係 person有id,name,gender欄位 dog有id,personid 關聯person name欄位 db.person.include x x.dog tolist 當我們按上面的方法進行操作,獲取的是person的列表 如果...

Linq中的SelectMany方法

先定義一些我們使用的輔助類 class school set class class set class student private string m name public string name set private int m public int set 說明 類school下面有乙個...