0

MSDN 在解释 LINQ 中的嵌套组方面做得非常糟糕: https ://docs.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. 在括号之间的from子句中,为什么源必须是genderGroup?为什么它不能像第一个 from 子句那样来自 peopleList?
  2. 在最后一个子句中,当与 genderGroup.Keys 进行比较时,实际查看的是 jobGroup 的哪个属性?
4

1 回答 1

0
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 语句中设置断点,看看会发生什么。

于 2019-03-17T09:29:47.047 回答