Синтаксис вложенной группы LINQ - PullRequest
1 голос
/ 17 марта 2019

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 между круглыми скобками, почему источником должен быть гендерная группа? Почему это не может быть просто из peopleList, как в первом предложении from?
  2. В последнем пункте, какое свойство jobGroup на самом деле просматривается, когда оно сравнивается с половой группой. Ключи?

1 Ответ

0 голосов
/ 17 марта 2019
from person in genderGroup
group person by person.Job

Этот подзапрос повторяет людей одного пола, поэтому он группирует мужчин по их профессиям, а затем группирует женщин по их работе и так далее. Если вместо genderGroup используется peopleList, запрос просто сгруппирует учащегося по заданию, и вложенная группировка не будет.

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 , чтобы увидеть, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...