[EF + Oracle] Consulta de los datos (II)

Prologo

En el capítulo anterior, realizamos una primera toma de contacto con la consulta de Datos con Linq –To Entities.

Continuación

Al igual que se puede realizar en una consulta SQL, con Linq to Entities disponemos la posibilidad de utilizar la palabra reservada “group”.

Esta sentencia nos va a permitir definir agrupaciones del conjunto de entidades devueltas por nuestra consulta.

Sintaxis SQL:

   1: using (OracleConenction con = new OracleConenction("MyConnection"))

   2: {

   3:     using (OracleCommand cmd=new OracleCommand(@"SELECT ID_PEDIDO,SUM(UNIDADES) 

   4:                                                 FROM DETALLES_PEDIDO

   5:                                                 GROUP BY ID_PEDIDO",con))

   6:     {

   7:  

   8:     }           

   9: }

Sintaxis Linq-EF:

   1: var query = from DETALLE_PEDIDO detalle in context.DETALLE_PEDIDO 

   2:             group detalle by detalle.ID_PEDIDO into g

   3:             select new  {g.Key,Suma = g.Sum(a=>a.UNIDADES)};

En la parte de la select hago uso de la palabra reservada new, para crear un tipo de dato anónimo, con las propiedades que quiero utilizar.

Expresión Lambda:

   1: var query = context.DETALLE_PEDIDO.GroupBy(detalle => detalle.ID_PEDIDO).Select(detalle => 

   2:                 new { 

   3:                     detalle.Key, 

   4:                     Unidades = detalle.Sum(suma => suma.UNIDADES) 

   5:                     }).ToList();

Este ejemplo de agrupación ha sido con una única columna, pero puede darse la situación de tener que agrupar por más de una columna. De nuevo, gracias a los tipos anonimos, podremos logar acometer nuestro objetivo. (El ejemplo es un poco tonto, pero sirve para ver la sintaxis)

Sintaxis SQL:

   1: using (OracleConenction con = new OracleConenction("MyConnection"))

   2: {

   3:      using (OracleCommand cmd = new OracleCommand(@"SELECT ID_PEDIDO,ID_PRODUCTO,SUM(UNIDADES) 

   4:                                                     FROM DETALLES_PEDIDO

   5:                                                     GROUP BY ID_PEDIDO,ID_PRODUCTO", con))

   6:     {

   7:     }

   8: }    

Sintaxis Linq-EF:

   1: var query = from DETALLE_PEDIDO detalle in context.DETALLE_PEDIDO 

   2:             group detalle by new {detalle.ID_PEDIDO,detalle.ID_PRODUCTO} into g

   3:             select new { g.Key.ID_PEDIDO,

   4:                          g.Key.ID_PRODUCTO,

   5:                          Suma = g.Sum(suma=>suma.UNIDADES)};

Expresión Lambda:

   1: var query = context.DETALLE_PEDIDO.GroupBy(detalle => new 

   2:             { detalle.ID_PEDIDO, detalle.ID_PRODUCTO }).

   3:             Select(detalle => new

   4:             {

   5:                 detalle.Key.ID_PEDIDO ,

   6:                 detalle.Key.ID_PRODUCTO ,

   7:                 Unidades = detalle.Sum(suma => suma.UNIDADES)

   8:             }).ToList();

 

En el próximo capítulo veremos la sintaxis necesaria para realizar uniones entre distintas tablas con EF.

3 comentarios en “[EF + Oracle] Consulta de los datos (II)”

  1. Muy buena serie !!!
    Con EF tanto Linq2Entities como Expresiones Lambda me preocupa el tema del rendimiento, y cómo optimizar las consultas. Ahora no tenemos acceso al SQL final que se ejecuta, sería interesante herramientas que permitan trazar las consultas SQL que se ejecutan para analizarlas, etcétera.

    salu2grz

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *