2010-03-31 63 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方法调用。

相关问题