Reverse a dictionary from <Parent, IEnumerable<Child>> to <Child, IEnumerable<Parent>>

Viewed 39

Given an enumerable of Parent where each entry holds an IEnumerable of Child objects

IEnumerable<KeyValuePair<Parent, IEnumerable<Child>>>

I want to reverse it so it is an IEnumerable of Child where each entry holds an IEnumerable of Parent objects.

IEnumerable<KeyValuePair<Child, IEnumerable<Parent>>>
1 Answers
source
    .SelectMany(
        x => x.Value,
        (k, v) => new
        {
            Child = k.v,
            Parent = k.Key
        })
    .GroupBy(
        keySelector: x => x.Child,
        elementSelector: x => x.Parent)
    .ToDictionary(
        keySelector: x => x.Key,
        elementSelector: x => x.AsEnumerable());
Related