none
Consulta con Linq, recuento y suma RRS feed

  • 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?

    martes, 10 de marzo de 2015 11:10

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,


    martes, 10 de marzo de 2015 15:30
  • 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
    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,


    martes, 10 de marzo de 2015 15:30
  • 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
    martes, 10 de marzo de 2015 16:13