Definición
Según la definición de MSDN, el método ToLookUp ejecutado sobre una variable que implemente el Tipo IEnumarable<T>, va a devolver un Diccionario (Dictionary) a través de las condiciones de agrupación indicadas, y mostrando el dato indicado.
Ejemplos de Uso
Para ver la utilidad de este método, vamos a ver una serie de ejemplos basados en una lista de Ejemplo acerca de la siguiente clase:
1: class Persona
2: {
3: public string Nombre { get; set; }
4: public int Edad { get; set; }
5: public string Departamento { get; set; }
6: }
Y una lista con los siguientes datos:
1: personas.Add(new Persona { Nombre = "Alvaro", Edad = 1, Departamento = "Habitacion 1" });
2: personas.Add(new Persona { Nombre = "Izan", Edad = 1, Departamento = "Habitacion 1" });
3: personas.Add(new Persona { Nombre = "Martina", Edad = 29, Departamento = "Habitacion 2" });
4: personas.Add(new Persona { Nombre = "Javi", Edad = 28, Departamento = "Habitacion 2" });
Ejemplo 1: Agrupar las personas según el Departamento al que pertenecen:
1: var agrupados = personas.ToLookup(a => a.Departamento );
2: foreach (var grupo in agrupados)
3: {
4: Console.WriteLine(grupo.Key);
5: foreach (var persona in grupo)
6: {
7: Console.WriteLine(String.Format("{0} tiene {1} años",persona.Nombre,persona.Edad));
8: }
9: }
El resultado obtenido sería:
1: Habitacion 1
2: Alvaro tiene 1 años
3: Izan tiene 1 años
4: Habitacion 2
5: Martina tiene 29 años
6: Javi tiene 28 años
Ejemplo 2: Agrupar las personas según departamento y solo visualizar su nombre.
1: var agrupados = personas.ToLookup(a => a.Departamento,a=>a.Nombre );
2: foreach (var grupo in agrupados)
3: {
4:
5: Console.WriteLine(grupo.Key);
6: foreach (var persona in grupo)
7: {
8: Console.WriteLine(String.Format("Nombre: {0}",persona));
9: }
10: }
Cuyo resultado sería:
1: Habitacion 1
2: Nombre: Alvaro
3: Nombre: Izan
4: Habitacion 2
5: Nombre: Martina
6: Nombre: Javi
Ejemplo 3: Agrupar las personas por departamento y edad:
1: var agrupados = personas.ToLookup(a => new {a.Departamento,a.Edad});
2: foreach (var grupo in agrupados)
3: {
4: Console.WriteLine(String.Format("Departamento {0} Edad {1}",grupo.Key.Departamento,grupo.Key.Edad));
5: foreach (var persona in grupo)
6: {
7: Console.WriteLine(String.Format("Nombre: {0}",persona.Nombre));
8: }
9: }
Y el resultado sería:
1: Departamento Habitacion 1 Edad 1
2: Nombre: Alvaro
3: Nombre: Izan
4: Departamento Habitacion 2 Edad 29
5: Nombre: Martina
6: Departamento Habitacion 2 Edad 28
7: Nombre: Javi
Bueno, espero que os sea de utilidad.
Saludos.