Principales respuestas
Consulta con Linq, recuento y suma

Pregunta
-
Tengo la siguiente table:
camion paletas # cant. piezas
2528 5 100
2528 7 150
2528 10 50
3240 2 20
3240 5 30
Tendria que realizer una consulta en Linq donde me de: agrupados por nro. de camion, la cantidad de paletas y la suma de las piezas.
la cantidad de paletas la haria asi:
dim q = (From u in db.TblInv Group by u.InvCam Into Count())
y la suma:
dim q = (From u in db.TblInv Group by u.InvCam into Sum(u.InvPie))
pero podria unir ambas en una sola consulta?
Respuestas
-
Hola,
Pues la agrupación, la puedes hacer solo para uno de los resultados, si lo que deseas es tener solo esos resultados puedes generar una entidad de soporte "QueryResult" que contenga las dos variables, y hacer el selectnew asignando los valores.
Ahora sobre el join claro que es posible, para ello debes utilizar la instrucción JOIN, checa esta referencia del lenguaje. https://msdn.microsoft.com/es-es/library/bb311040.aspx
Por otro lado, me preguntaba si es necesario que realices todo en la misma consulta, me parece que la solución que tienes tiene el mejor rendimiento, pero ya tienes la referencia para hacer lo que buscas.
Quedaría algo así: (el código es solo referencia)
from obj in ctx.Entities where obj.ID != "" group obj.Quantity by obj.Pieces into grp select new QueryResult { Quantity = grp.Count(), Pieces = Sum(grp.Quantity) };
Saludos,
- Editado Rodrigo Fraga Olvera martes, 10 de marzo de 2015 15:30
- Marcado como respuesta eduepa martes, 10 de marzo de 2015 16:13
-
Pues al fin me quedo asi:
dim q = From u in db.TblInvs Group by u.InvCam Into pal = Count(), pie = Sum(u.InvPie) Order by InvCam
y comparando con lo anterior (VB2010) el resultado da el mismo, me suma al final casi 4000 pales con 170.000 piezas, todas discriminadas por Nro. de Camion.
Gracias.
- Marcado como respuesta eduepa martes, 10 de marzo de 2015 16:13
Todas las respuestas
-
Hola,
Pues la agrupación, la puedes hacer solo para uno de los resultados, si lo que deseas es tener solo esos resultados puedes generar una entidad de soporte "QueryResult" que contenga las dos variables, y hacer el selectnew asignando los valores.
Ahora sobre el join claro que es posible, para ello debes utilizar la instrucción JOIN, checa esta referencia del lenguaje. https://msdn.microsoft.com/es-es/library/bb311040.aspx
Por otro lado, me preguntaba si es necesario que realices todo en la misma consulta, me parece que la solución que tienes tiene el mejor rendimiento, pero ya tienes la referencia para hacer lo que buscas.
Quedaría algo así: (el código es solo referencia)
from obj in ctx.Entities where obj.ID != "" group obj.Quantity by obj.Pieces into grp select new QueryResult { Quantity = grp.Count(), Pieces = Sum(grp.Quantity) };
Saludos,
- Editado Rodrigo Fraga Olvera martes, 10 de marzo de 2015 15:30
- Marcado como respuesta eduepa martes, 10 de marzo de 2015 16:13
-
Pues al fin me quedo asi:
dim q = From u in db.TblInvs Group by u.InvCam Into pal = Count(), pie = Sum(u.InvPie) Order by InvCam
y comparando con lo anterior (VB2010) el resultado da el mismo, me suma al final casi 4000 pales con 170.000 piezas, todas discriminadas por Nro. de Camion.
Gracias.
- Marcado como respuesta eduepa martes, 10 de marzo de 2015 16:13