Lo que estás buscando es un multimap.
Es posible que desee echar un vistazo a la answer to this question.
Es posible que también desee consultar el C5 Generic Collection library, que es gratuito y tiene una implementación de un multimapa.
Si tienes ganas de rodar su propio, un lugar sencillo para empezar es un diccionario de listas:
Dictionary<TKey,List<TValue>>
Sin embargo, no se puede añadir a un diccionario como la forma normal. Primero debe verificar si la clave ya existe y, de ser así, buscar el valor (lista) y agregarlo. De lo contrario, debe crear la lista y completarla con un valor.
Si usted está tan inclinado, sugeriría que considerar el uso de un conjunto de métodos de extensión para simplificar la opción Agregar/Quitar operaciones:
public static class MultimapExt
{
public static void Add<TKey,TValue>(
this Dictionary<TKey,List<TValue>> dictionary, TKey key, TValue value)
{
List<TValue> valueList;
if(!dictionary.TryGetValue(key, out valueList)
{
valueList = new List<TValue>();
dictionary.Add(key, valueList);
}
valueList.Add(value);
}
public static void Remove<TKey,TValue>(
this Dictionary<TKey,List<TValue>> dictionary, TKey key, TValue value)
{
List<TValue> valueList;
if(dictionary.TryGetValue(key, out valueList))
{
valueList.Remove(value);
if(valueList.Count == 0)
dictionary.Remove(key);
}
}
}
¿Cómo va a conseguir la valora si el nombre no es único y eso es lo que espera hacer su búsqueda? –
Supongo que devolvería un IEnumerable o equivalente. – user171197