Digamos que tengo un objeto que contiene el nombre de una persona y su ciudad de origen.Encontrar combinaciones de una lista agrupada usando LINQ en C#
public class personDetails
{
public string City;
public string Name;
}
Y tengo una lista con las siguientes entradas agregadas.
Name City
John | London
Jane | London
Tom | New York
Bob | New York
Fred | New York
Lo que estoy buscando son todas las posibles combinaciones de nombres, agrupadas por ciudad.
John Tom
John Bob
John Fred
Jane Tom
Jane Bob
Jane Fred
puedo hacer esto si sé de antemano el número de grupos, utilizando el siguiente código
List<personDetails> personList = new List<personDetails>();
//populate list
var groupedPersons = personList.GroupBy(c => c.City);
foreach (var item1 in groupedPersons[0])
{
foreach (var item2 in groupedPersons[1])
{
Console.WriteLine(item1.Name + " " + item2.Name);
}
}
Sin embargo, esto sólo funciona si sé que el número de grupos de antemano, y rápidamente se vuelve difícil de manejar a medida que aumenta la cantidad de grupos. Estoy seguro de que hay una forma elegante de hacerlo con LINQ. ¿Alguien puede arrojar algo de luz?
Tome un vistazo a esta respuesta http://stackoverflow.com/questions/9168269/permutation-algorithms-in-c-sharp. Podrías unirte a tu lista consigo mismo. – Brad
@Brad Eso funcionaría para el ejemplo de la lista con 2 ciudades. Lo que OP quiere es un producto cruzado N dimensional, donde N no se conoce hasta el tiempo de ejecución. Ese fragmento de código no lo proporciona. – Servy