none
Group by linq RRS feed

  • Pregunta

  • buenos dias, quisiera saber como hacer esto en linq 

    select AircraftType,COUNT(*) as "cantidad cantidad de vuelos" ,
    convert( varchar(5),sum(DateDiff(minute, HoraTakeOff, HoraLanding))/60 ) as hours --+ ':' + convert( varchar(5), (sum(DateDiff(minute, HoraTakeOff, HoraLanding))) ) AS Hours
     from TblTrackerOnline where TypeOfFligth = 'wwe' and IdEstado = 2 and PilotId= '1' and IdReserva is not null
     group by AircraftType

    es una sumatoria de la difrencia de horas voladas..

    muchas gracias 

      
    • Editado greevard viernes, 31 de mayo de 2013 10:45
    jueves, 30 de mayo de 2013 18:44

Respuestas

  • a ver si tenemos estos registros

    PilotId Nombre AirCraft HoraSalida HoraLLegada
    1 Demian Boeing 04/06/2013 13:00 04/06/2013 20:00
    1 Demian Boeing 04/06/2013 13:00 04/06/2013 23:00
    1 Demian md83 04/06/2013 13:00 04/06/2013 23:00

    quieres el query te de como resultado

    AirCraftType
    Cantidad Horas
    Boeing 2 17
    md83 1 10

    deberia ser este el query

    var result = (from i in RoamingTables.Piloto
                  where i.PilotoId == 1
                  group i by i.AirCrafType into g
                  select new
                  {
                  Pilo = g.Key,
                  Cantidad = g.Count(),
                  Horas =
                  g.Sum(D => (D.HoraLLegada.Day > D.HoraSalida.Day ? 
                                  (((D.HoraLLegada.Day - D.HoraSalida.Day) * 24) + (D.HoraLLegada.Hour - D.HoraSalida.Hour)) :
                                  (D.HoraLLegada.Day < D.HoraSalida.Day) ? (D.HoraLLegada.Day * 24) + (D.HoraLLegada.Hour - D.HoraSalida.Hour)
                                  : D.HoraLLegada.Hour - D.HoraSalida.Hour))
                          }).ToList();


    Switch Case dentro del LInq simulas el DateDiff

    seleccionas todo lo agrupas por AirCraftType luego el cuentas la cantidad de registros de cada uno con el g.count() y las horas de vuelo solo haces una suma pero tomando en cuenta los Days de cada hora para saber si la hora de llegada es mayor a la hora de salida y asi simulas el DateDiff si es mayor le sumas 24 * la cantidad de dias que ha pasado volando (una locura que pase varios dias jajaja) pero creo que es lo que esta buscando

    sino es asi jeje seguiremos intentandolo pero ese query realiza el ejemplo anterior

    Edito: tenia que considerar tambien si el dia era menor porque puede ser que viaje un 31 de mes y llegue el dia 1 del siguiente

    saludos



    • Editado AngelMP miércoles, 5 de junio de 2013 13:10 Modifico codigo
    • Marcado como respuesta greevard jueves, 6 de junio de 2013 17:38
    martes, 4 de junio de 2013 20:16

Todas las respuestas

  • Buenos días greevard...

    tu consulta no es muy dificil te coloco un ejemplo

    var Query = (from A in db.TblTrackerOnLine where (A.TypeOfFligth == "wwe" && A. IDEstado == 2 && A. PilotId == "1" && A.IdReserva != null) group A by A.AircraftType into B select new { //Aqui tus columnas de B si quieres hacer una sumatoria as

    Hours = //aqui seleccionas tus horas y lo que tengas que seleccionar. }).ToList();

    espero te sriva de ayuda yo me estoy iniciando pero he hecho group by ya varias veces

    saludos


    sábado, 1 de junio de 2013 13:22
  • Hola angel gracias por responder, si hasta ahi llegue el tema es como formular la suma 

    yo hice esto pero no funciona 

                       

    var result = (from i in contexto.TblTrackerOnlines.Include("Piloto")
                                      where i.TypeOfFligth == "ProReal" &
                                      i.Piloto.PilotId == piloto.PilotId &
                                      i.TblEstado.IdEstado == 2 &
                                      strtiposDeAvion.Contains(i.AircraftType ) &
                                      i.IdReserva != null
                                      group i by i.AircraftType into g
                                      let horaVuelo = (from hc in contexto.TblTrackerOnlines
                                                    where hc.TypeOfFligth == "ProReal" & hc.Piloto.PilotId == piloto.PilotId & hc.TblEstado.IdEstado == 2 &
                                                    hc.AircraftType == "B737" select new {totalhoras = (System.Data.Objects.SqlClient.SqlFunctions.DateDiff("MM",hc.HoraTakeOff,hc.HoraLanding)) }).FirstOrDefault()   

                                      //let minutos = System.Data.Objects.SqlClient.SqlFunctions.DateDiff("MM", g.Select(x => x.HoraTakeOff.Value).FirstOrDefault(), g.Select(x1 => x1.HoraLanding.Value).FirstOrDefault())
                                      select new
                                      {
                                          Avion_Volado =  g.Key,
                                          Cantidad_vuelos = g.Count(),
                                         minutos = System.Data.Objects.SqlClient.SqlFunctions.DateDiff("MM", g.Select(x => x.HoraTakeOff.Value).FirstOrDefault(), g.Select(x1 => x1.HoraLanding.Value).FirstOrDefault())                                    

                                           }).ToList();

    ese es mi problemita no se como hacer la suma, si n que me de error !! gracias !


    Demian

    domingo, 2 de junio de 2013 2:58
  • Hola greevard podras por favor colocar la estructura de tu tabla para correrlo? con algunos registros y el resultado que deseas??
    lunes, 3 de junio de 2013 17:31
  • es simple una sola tabla que tiene hora de despegue, hora de aterrizaje, tipo de avion usado, piloto, 

    yo necesito saber sumatoria de las horas voladas por un piloto por cada avion o sea 

    demian 

    Boeing 737 200 horas 

    md83   300 horas 

    b744 50 horas eso.. 

    para poder sabes las horas hay que hacer un datedif de la hora de despegue y la de aterrizaje. 

    SAludos y gracias ! 



    Demian

    martes, 4 de junio de 2013 1:32
  • a ver si tenemos estos registros

    PilotId Nombre AirCraft HoraSalida HoraLLegada
    1 Demian Boeing 04/06/2013 13:00 04/06/2013 20:00
    1 Demian Boeing 04/06/2013 13:00 04/06/2013 23:00
    1 Demian md83 04/06/2013 13:00 04/06/2013 23:00

    quieres el query te de como resultado

    AirCraftType
    Cantidad Horas
    Boeing 2 17
    md83 1 10

    deberia ser este el query

    var result = (from i in RoamingTables.Piloto
                  where i.PilotoId == 1
                  group i by i.AirCrafType into g
                  select new
                  {
                  Pilo = g.Key,
                  Cantidad = g.Count(),
                  Horas =
                  g.Sum(D => (D.HoraLLegada.Day > D.HoraSalida.Day ? 
                                  (((D.HoraLLegada.Day - D.HoraSalida.Day) * 24) + (D.HoraLLegada.Hour - D.HoraSalida.Hour)) :
                                  (D.HoraLLegada.Day < D.HoraSalida.Day) ? (D.HoraLLegada.Day * 24) + (D.HoraLLegada.Hour - D.HoraSalida.Hour)
                                  : D.HoraLLegada.Hour - D.HoraSalida.Hour))
                          }).ToList();


    Switch Case dentro del LInq simulas el DateDiff

    seleccionas todo lo agrupas por AirCraftType luego el cuentas la cantidad de registros de cada uno con el g.count() y las horas de vuelo solo haces una suma pero tomando en cuenta los Days de cada hora para saber si la hora de llegada es mayor a la hora de salida y asi simulas el DateDiff si es mayor le sumas 24 * la cantidad de dias que ha pasado volando (una locura que pase varios dias jajaja) pero creo que es lo que esta buscando

    sino es asi jeje seguiremos intentandolo pero ese query realiza el ejemplo anterior

    Edito: tenia que considerar tambien si el dia era menor porque puede ser que viaje un 31 de mes y llegue el dia 1 del siguiente

    saludos



    • Editado AngelMP miércoles, 5 de junio de 2013 13:10 Modifico codigo
    • Marcado como respuesta greevard jueves, 6 de junio de 2013 17:38
    martes, 4 de junio de 2013 20:16
  • Muchas gracias Funciono perfecto, ya no sabia como hacer el SUM! 

    pregunta el simbolo " ?  " es el switch? 


    Demian


    • Editado greevard jueves, 6 de junio de 2013 17:42
    jueves, 6 de junio de 2013 17:38
  • si el simbolo es como decir

    D.HoraLLegada.Day > D.HoraSalida.Day  ¿es Verdad? : 

    jeje un ejemplo

    ? = Valida Si es Verdadero

    : = si es falso

    jueves, 6 de junio de 2013 18:26