C# 字典中的C linq

C# 字典中的C linq,c#,linq,dictionary,C#,Linq,Dictionary,我有一个对象allStudents=字典 在Linq,我如何获得所有男性学生的名单?学生。性别==所有教室的m 伊恩尝试以下方法 var maleStudents = allStudents .SelectMany(x => x.Values) .Where(x => x.Gender=="m"); 其中的诀窍是SelectMany操作。它的效果是将列表集合展平为单个学生集合。生成的列表与将每个列表前后排列的结果相同 可以使用嵌套的from子句。第一个从中选择所有类及其学生

我有一个对象allStudents=字典

在Linq,我如何获得所有男性学生的名单?学生。性别==所有教室的m

伊恩

尝试以下方法

var maleStudents = allStudents
  .SelectMany(x => x.Values)
  .Where(x => x.Gender=="m");
其中的诀窍是SelectMany操作。它的效果是将列表集合展平为单个学生集合。生成的列表与将每个列表前后排列的结果相同

可以使用嵌套的from子句。第一个从中选择所有类及其学生,从字典中选择一个项,表示为KeyValuePair。然后,您可以使用Value属性从类中选择所有学生并对其进行筛选:

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

在封面下,嵌套的from子句被转换为SelectMany方法调用。

关于stackoverflow有很多家庭作业问题。只需适当地标记。在任何情况下,我不认为这是一个。我使用这些对象,因为它们将被普遍理解。真正的业务对象一般用户都不知道。我很多年前就毕业了,不再做作业了;是的,C编译器将查询转换为稍微复杂一点的代码,但我认为在任何合理的场景中,这种差异都不重要。更重要的是选择更具可读性的解决方案,这是个人意见。