Iniciar sesión
Registrarse
He olvidado mi contraseña
23 MAR 2011
Vistas de la Entrada 4 Vistas de la Entrada 3
C# EF LINQ Oracle
[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.

Enviado por
Compartir : Compartir en Facebook Compartir en Twitter Compartir en Google+ Compartir en Linkedin
anonymous 23 de marzo del 2011 a las 21:38

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

Responder
jtorrecilla 24 de marzo del 2011 a las 08:10

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: http://msdn.microsoft.com/en-us/library/cc853327.aspx

Responder
anonymous 27 de abril del 2011 a las 11:01

segui´ra esta estupenda serie ? Salu2grz

Responder
Dejar un comentario
Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Dejar una respuesta

C#

Tip Rapido: Método Extensor

Bueno aquí va un mini-post. Cuantas veces os habéis encontrado con: if (a>=5 and a<=10) … Yo al menos recuerdo unas pocas. Bueno aquí va el mini truco. Creamos una clase estática con un método extensor: Code Snippet public static class ExtensionMethod  {    public  static bool Between(this int original, int menor, int mayor)      {          return (original […]

Enviado por
C# Patrones

Patrón UoW Parte 2

Introducción En vista de que parece que el artículo que publique ayer sobre UoW, parecía que era demasiado simple…, y a pesar de que Lucas Ontivero ha publicado un ejemplo (Gracias), he decidido publicar un ejemplo un poco más amplio para ver su utilización. Usando el Patrón Partiendo de una clase base: 1: public abstract […]

Enviado por
Sin categoría

[Opinión]Los Nuevos Programadores y VB o C#

Llevo relativamente poco tiempo en el mundo de la programación ya que mis orígenes, los verdaderos, serán del 2001 con C, aunque anteriormente ya había hecho cosas con Visual Basic 6. Por si no lo he dicho nunca, o no me has leído decirlo me encanta programar. Después de la primera introducción voy al hilo […]

Enviado por
C# MCC PERSONAL VB VS WinForms

[Personal] Microsoft Community Contributor 2011

En mi revisión matutina del correo, me he encontrado una más que Grata Sorpresa: Dear Javier, Congratulations! We’re pleased to inform you that your contributions to Microsoft online technical communities have been recognized with the Microsoft Community Contributor Award. The Microsoft Community Contributor Award is reserved for participants who have made notable contributions in Microsoft […]

Enviado por
Sin categoría

[Personal] MVP Visual C# 2011

Buenas tardes a todos, Este post es como dice el titulo para anunciar que he sido galordando por el premio MVP de Microsoft en la categoria de C#. Desde aquí quiero darles las gracias a los chicos de Microsoft empezando por Cristina Gonzalez, Jose Bonnin, David Salgado, Boris Armenta… También mi gratitud a la gente de […]

Enviado por