LINQ嵌套组语法



msdn在解释linq中的嵌套组方面做得非常糟糕:https://learn.microsoft.com/en-us/dotnet/csharp/linq/create-a-nested-group

以此示例:

IEnumerable<IGrouping<Gender, IGrouping<Job, Person>>> query =
    from person in peopleList
    group person by person.Gender into genderGroup
    from jobGroup (
      from person in genderGroup
      group person by person.Job
    )
    group jobGroup by genderGroup.Key;

我的问题:

  1. 在括号之间的"来自子句"中,为什么源必须是性别组?为什么不像第一个条款那样来自人民主义者?
  2. 在最后一个子句中,将其与性别group.keys进行比较时,实际上正在查看工作组的哪个属性?
from person in genderGroup
group person by person.Job

这个子问题迭代了同一性别的人,因此它按照他们的工作将男性分组,然后按其工作进行分组,等等。如果使用peopleList代替genderGroup,则查询只会按工作进行分组,并且不会嵌套分组。

group jobGroup by genderGroup.Key;

这将内部组而不是外部组的钥匙(性别)分组。假设有四个jobGroup:男性程序员,男性设计师,女程序员和女设计师。查询小组通过性别组成,因此产生了一个嵌套组:

male (outer group's key)
    male programmers 
    male designers
female (outer group's key)
    female programmers 
    female designers

要更好地理解,我建议您在Visual Studio中运行此小型代码,并在Linq语句中设置断点以查看发生的情况。

最新更新