2010-03-31 56 views
19

我有一個對象allStudents = Dictionary<ClassRoom, List<Student>>()在詞典<> C#LINQ

在LINQ我怎麼會得到所有誰是男學生的名單? (student.Gender ==「m」)從所有的教室?

伊恩

+0

@phsr是否重要? – baron 2010-03-31 00:16:42

+0

在stackoverflow上有很多作業問題。只需標記適當。 (無論如何,我不認爲這是。) – harpo 2010-03-31 00:18:09

+4

我使用那些對象,因爲他們將被普遍理解。一般用戶不會知道真正的業務對象。我多年前畢業於toooo,已經有作業了:) – 2010-03-31 00:28:55

回答

20

請嘗試以下

var maleStudents = allStudents 
    .SelectMany(x => x.Values) 
    .Where(x => x.Gender=="m"); 

訣竅這是SelectMany操作。它具有將List<Student>的集合壓縮成單個集合Student的效果。結果列表與前面列出的每個列表相同。

+0

這個順便說一句,將比Tomas下面建議的速度更快 – vittore 2010-03-31 00:17:38

+2

是的,C#編譯器將查詢翻譯成略複雜的代碼,但我不認爲它們之間的差別會在任何合理的情況下是重要選擇看起來更具可讀性的解決方案(這是個人觀點)更爲重要。 – 2010-03-31 00:20:20

18

您可以使用嵌套from子句。第一個from選擇所有班級與他們的學生(詞典中的一個項目),這表示爲KeyValuePair<ClassRoom, List<Student>>。然後,你可以使用Value屬性選擇班級所有學生和它們進行過濾:

var q = from cls in allStudents 
     from s in cls.Value 
     where s.Gender == "M" select s; 

下蓋,嵌套from條款被轉換爲SelectMany方法調用。

相關問題