Linq中的SelectMany方法

2021-08-24 18:29:03 字數 1316 閱讀 1026

先定義一些我們使用的輔助類:

class school set } } class class set } } class student private string m_name; public string name set } private int m_***; public int *** set } }

說明:類school下面有乙個class的集合,每個class下面有有乙個student的集合。每個學生有name和***兩個屬性。現在需要遍歷school下面的所有的學生,當然我們可以用兩個巢狀的foreach語句類遍歷school下面的所有的class,然後再用foreach來遍歷class下面的所有的student,把他們新增到乙個list裡去。這個場景也是實際程式設計中經常遇到的。有了linq我們就可以大大的簡化我們的**:

static void main(string args) s.classes[0].students.add(new student(1, "a0")); s.classes[1].students.add(new student(1, "b0")); s.classes[2].students.add(new student(0, "c0")); s.classes[3].students.add(new student(0, "d0")); s.classes[4].students.add(new student(0, "e0")); s.classes[0].students.add(new student(0, "a1")); s.classes[0].students.add(new student(1, "a1")); s.classes[0].students.add(new student(1, "a2")); s.classes[0].students.add(new student(1, "a3")); s.classes[1].students.add(new student(0, "b1")); s.classes[2].students.add(new student(0, "c1")); s.classes[3].students.add(new student(0, "d1")); //取出school下的所有性別是0的student var x = s.classes.selectmany(b => b.students).where(i => i.*** == 0); foreach (var b in x) console.readkey(); }

我們之需要用一下selectmany就可以了,不用去用foreach進行兩次遍歷。selectmany在msdn中的解釋:將序列的每個元素投影到 ienumerable(t) 並將結果序列合併為乙個序列。

參考msdn:

ms-help:

Linq 中 Distinct 的運用

person1 id 1,name test1 person2 id 1,name test1 person3 id 2,name test2 以上list如果直接使用distinct方法進行過濾,仍然返回3條資料,而需要的結果是2條資料。下面給出解這個問題的方法 方法1 distinct 方法中使...

linq中的contains條件

在sql查詢語句中,in 在linq 中用contains,並且contains前面是陣列,而後面是列名,如 select distinct bh from cd where lb 身份 and lm in 合同工 臨時工 轉換成linq 是這樣的 如果sf是變數,是在程式中根據使用者選擇的條件臨時...

Linq中的連線 join

linq中連線主要有組連線 內連線 左外連線 交叉連線四種。各個用法如下。1 組連線 組連線是與分組查詢是一樣的。即根據分組得到結果。如下例,根據publisther分組得到結果。使用組連線的查詢語句如下 使用組連線 var groupquery from publisher in sampleda...