LINQ 嵌套组语法
LINQ Nested group syntax
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;
我的问题:
- 在括号中的 from 子句中,为什么 source 必须是 genderGroup?为什么它不能像第一个 from 子句那样来自 peopleList?
- 在最后一个子句中,与genderGroup.Keys比较时,实际上正在查看jobGroup的属性?
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 和 set breakpoints inside the LINQ statement 中的这段小代码,看看会发生什么。
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;
我的问题:
- 在括号中的 from 子句中,为什么 source 必须是 genderGroup?为什么它不能像第一个 from 子句那样来自 peopleList?
- 在最后一个子句中,与genderGroup.Keys比较时,实际上正在查看jobGroup的属性?
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 和 set breakpoints inside the LINQ statement 中的这段小代码,看看会发生什么。