@tef the baseline behaviour is GroupBy:
https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.groupby?view=net-8.0
i.e. "get some property of each element and use it as a key by which to group all elements by".
now imagine that instead of keySelector just returning one key, it can return any number of keys, so an element can appear in multiple groups.