У меня есть IEnumerable<S>
с S { T: a; IEnumerable<U> : b}
, и я хотел бы сгруппировать его в IGrouping<T, U>
, чтобы каждый ключ a был связан со всеми элементами U в любом b, который находится в том же S, что и этот ключ, из , (Это звучит очень сложно, но как только вы представляете себе операцию, которую я действительно хочу выполнять в вашей голове, она становится довольно ясной и, казалось бы, простой). Каков правильный способ сделать это? То, что я в настоящее время сделать этоGroupMany эквивалент
ienum.SelectMany(i => i.b.Select(b => new { i.a, b }))
.GroupBy(i => i.a, i => i.b);
, но я не могу сказать, я считаю, что четкое и читаемый в любой форме, так или форме, а не все, что DRY либо. Наверняка, должен быть лучший способ?
EDIT: В комментариях сказано, что a, b и i делают для довольно нечеткого чтения. Поэтому давайте сделаем это немного более конкретным. Допустим, S
сейчас Office { Manager manager, IEnumerable<Employee> employees}
. Это ставит вопрос: дай мне перегруппировку всех менеджеров своим сотрудникам. Это составляет эквивалентное заявление
offices.SelectMany(office => office.employees.Select(employee => new { office.manager, employee }))
.GroupBy(pair => pair.manager, pair => i.employee);
Я не уверен, что это помогает. Для меня он читается еще более нечитаемым. Итак, все тот же вопрос, как сделать это более читаемым.
Вы можете сделать его более читаемым, используя правильные имена переменных. 'i',' b' и 'a' не очень описательны. – Stijn
Я сделаю редактирование на вопрос – Martijn