Вам нужно перебрать по словарю и получить все ключи, которые указывают на хэш-набор, который содержит искомое значение:
var matches = dict.Where(kvp => kvp.Value.Contains("user3"));
Объяснение:
Вы запрашиваете все пары ключ-значение, где значение (которое, как мы знаем, относится к типу Hashset) содержит искомую строку.
Обновить : чтобы получить только ключи из пар ключ-значение, я думаю, что вы можете сделать это:
var matches = dict.Where(kvp => kvp.Value.Contains("user3")).Select(kvp => kvp.Key);
Дальнейшие размышления: если ваши сценарии использования всегда будут иметь приоритет при поиске пользователем, возможно, вам следует инвертировать словарь: имя пользователя должно быть ключом, а значением будут группы, к которым принадлежит пользователь. Таким образом, поиск всех групп для пользователя будет O (1).