domingo 2 de mayo de 2010

LINQ – Group Join: Agrupación por unión de dos tablas

Ejemplo:

Dim resultado = From pais In m_Paises _
Group Join persona In m_Personas On _
pais.CodPais Equals persona.CodPais _
Into PersonasDelPais = Group, _
EdadMinima = Min(persona.Edad) _
Select pais.NombrePais, _
pais.CodPais, _
PersonasDelPais, EdadMinima


m_Paises tiene objetos de la clase Pais. Esta clase tiene las propiedades CodPais (string) y NombrePais (string).


m_Personas tiene objetos de la clase Persona. Esta clase tiene las propiedades NombrePersona (string), CodPais (string) y Edad (integer).


Esta es una de las consultas más interesantes que podemos realizar con LINQ, se trata de una mezcla entre JOIN y agrupación (lo haremos por medio de las palabras reservadas Group Join). 
Lo vemos con el ejemplo anterior: la variable resultado será una secuencia de objetos con las siguientes propiedades: NombrePais(string), CodPais(string), PersonasDelPais (secuencia de objetos del mismo tipo que los objetos contenidos en la secuencia m_Personas, es decir, objetos de la clase Persona) y EdadMinima (integer). ´


Como se ve hemos realizado una agrupación con otra tabla generando una secuencia (PersonasDelPais) y además hemos utilizado una función de agregado, en este caso Min para guardar la edad mínima dentro de ese grupo de personas pertenecientes a un país.