martes, 13 de noviembre de 2018

148. Linq Join

Pues seguimos con esta serie de post de lynq, así como en algún momento lo maneje lynq nos ayuda a hacer mas sencillo el manejo de datos, por ello lo que vamos ha hacer esta vez es enlazar 2 tablas mediante lynq.

Bueno realmente hacer esto es muy sencillo, veamos un código y platiquemos sobre el:

namespace union
{
    class Program
    {
        public class  Alumno
        {
            public string nombre { getset; }
            public int Lista { getset; }
        }
 
        public class Calificacion
        {
            public string materia { getset; }
            public int Lista { getset; }
            public int calificacion { getset; }
        }
 
        static void Main(string[] args)
        {
            List<Alumno> Alumnos = new List<Alumno>();
            Alumnos.Add(new Alumno() { nombre="Carlos", Lista=1 });
            Alumnos.Add(new Alumno() { nombre = "Miguel", Lista = 2 });
            Alumnos.Add(new Alumno() { nombre = "Juan", Lista = 3 });
            Alumnos.Add(new Alumno() { nombre = "Raquel", Lista = 4 });
            Alumnos.Add(new Alumno() { nombre = "Irma", Lista = 5 });
 
            List<Calificacion> calificaciones = new List<Calificacion>();
            calificaciones.Add(new Calificacion() 
                        { Lista=1, calificacion=8, materia="1" });
            calificaciones.Add(new Calificacion() 
                        { Lista = 1, calificacion = 8, materia = "2" });
            calificaciones.Add(new Calificacion() 
                        { Lista = 1, calificacion = 9, materia = "3" });
            calificaciones.Add(new Calificacion() 
                        { Lista = 1, calificacion = 10, materia = "4" });
            calificaciones.Add(new Calificacion() 
                        { Lista = 2, calificacion = 8, materia = "1" });
            calificaciones.Add(new Calificacion() 
                        { Lista = 3, calificacion = 8, materia = "2" });
            calificaciones.Add(new Calificacion() 
                        { Lista = 4, calificacion = 9, materia = "3" });
            calificaciones.Add(new Calificacion() 
                        { Lista = 2, calificacion = 10, materia = "4" });
 
            var x = from a in Alumnos join b in calificaciones 
                    on a.Lista equals b.Lista 
                    select new { nombre = a.nombre, calificacion = b.calificacion };
 
            foreach(var loop in x)
            {
                Console.WriteLine(loop.nombre + " - " + loop.calificacion);
            }
 
            Console.ReadLine();
        }
    }
}

Bien que hace el código, el código lo que hace es que carga 2 objetos y obtiene un tercer objeto anónimo poco resultado de ambos, y en donde esta la magia


 var x = from a in Alumnos join b in calificaciones 
                    on a.Lista equals b.Lista 
                    select new { nombre = a.nombre, calificacion = b.calificacion };


si observamos estas lineas es muy fácil de leer, estamos usando 2 objetos uno llamado alumnos y uno llamado calificaciones, le estamos indicando a lynq que el valor que se emplea para hacer la unión es el campo lista, que se encuentra en ambos objetos, ahora bien, en un post pasado vimos que podemos usar linq para hacer convenciones de datos entre objetos, bueno en este caso estamos creando un nuevo objeto
      
select new { nombre = a.nombre, calificacion = b.calificacion };

pero como pueden ver, no existe un objeto con estas características, estamos creando un objeto anónimo, que lo estamos utilizando en la siguiente linea.


            foreach(var loop in x)
            {
                Console.WriteLine(loop.nombre + " - " + loop.calificacion);
            }


Felices Lineas


No hay comentarios.:

Publicar un comentario