[EF + Oracle] Consulta de los datos (II) - El blog de Javier Torrecilla

[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.

Published 23/3/2011 14:24 por Javier Torrecilla
Archivado en: ,,,
Comparte este post:
http://geeks.ms/blogs/jtorrecilla/archive/2011/03/23/ef-oracle-consulta-de-los-datos-ii.aspx

Comentarios

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

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

Wednesday, March 23, 2011 9:38 PM por pregunton cojonero

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

Hola Pregunton, la verdad es que no he me he metido mucho a la hora de controlar el rendimiento de EF o Lambda y como optimizar las consultas.

Si saco un poco de tiempo hago unas pruebas y comento.

Por otro lado, te dejo un enlace interesante: msdn.microsoft.com/.../cc853327.aspx

Thursday, March 24, 2011 8:10 AM por Javier Torrecilla

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

segui´ra esta estupenda serie ? Salu2grz

Wednesday, April 27, 2011 11:01 AM por pregunton cojonero