none
Consulta con un Count RRS feed

  • Pregunta

  • Hola amigos soy nuevo en linq y necesito pasar esta consulta se sql a linq:

     

    SELECT IdPensum, p.Codigo, p.Nombre, p.IdCarrera, 
    Ano, Activo, p.IdGradoTitulacion, p.FechaModificacion, 
    p.ModificadoPor,c.Nombre as NombreCarrera,
    na.Nombre as NombreNivelAcademico,
    (select count(*) from AsignaturasPensum as ap where ap.IdPensum = p.IdPensum) as CantidadAsignaturas
    FROM dbo.Pensum as p, dbo.Carreras as c, dbo.GradosTitulacion as na
    WHERE p.IdCarrera = c.IdCarrera
    AND p.Activo = 1
    AND p.IdGradoTitulacion = na.IdGradoTitulacion
    ORDER BY p.Codigo,p.Nombre
    

    ahora tengo esto:

     

    public IEnumerable GetPensumActivos()
            {
                var Query = from p in Context.Pensums.Include("Carrera").Include("GradosTitulacion").Include("AsignaturasPensums").Where(a => a.Activo == true)
                            orderby p.Codigo ascending, p.Nombre ascending
                            select p;
    
                return Query.ToList();
            }
    


    estoy trabajando con entity framework y pues tengo entendido que en estos casos las consultas me devuelve entidades completas, lo unico que me falta de la consulta es la parte de count que no se como devolverla en la misma consulta o si la realizo en una diferente y despues la tengo que unir.

     

    Gracias por toda la ayuda que me puedan brindar.

     


    Pura Vida
    martes, 27 de septiembre de 2011 15:24

Respuestas

  • Hola Paul,

    Mira este ejemplo sencillo de Linq, para que veas como puedes calcular el count

     

    List<int> Lista = new List<int>()
                {
                    1,
                    1,
                    2,
                    3,
                };
    
                var resultado = from b in Lista
                        select new {Numero = b,Count = Lista.Count((a)=>{return a==b;})};
    

     


    Ahora, una advertencia.

    Esta sentencia en BB.DD es de lo más lento que se puede ejecutar.

     

    (select count(*) from AsignaturasPensum as ap where ap.IdPensum = p.IdPensum) as CantidadAsignaturas

    Revisa esto si puedes e intenta obtener eso de otra forma.

     

    Como consejo yo no lo ejecutaría de esa forma sino que una vez devuelto el valor de la BB.DD sin el Count hagas la agrupación en el cliente a partir de los valores devueltos en "Query";

    Saludos,


    phurtado
    • Editado Pedro Hurtado martes, 27 de septiembre de 2011 17:04
    • Marcado como respuesta paulcc84 miércoles, 28 de septiembre de 2011 13:10
    martes, 27 de septiembre de 2011 17:03

Todas las respuestas

  • Hola Paul,

    Mira este ejemplo sencillo de Linq, para que veas como puedes calcular el count

     

    List<int> Lista = new List<int>()
                {
                    1,
                    1,
                    2,
                    3,
                };
    
                var resultado = from b in Lista
                        select new {Numero = b,Count = Lista.Count((a)=>{return a==b;})};
    

     


    Ahora, una advertencia.

    Esta sentencia en BB.DD es de lo más lento que se puede ejecutar.

     

    (select count(*) from AsignaturasPensum as ap where ap.IdPensum = p.IdPensum) as CantidadAsignaturas

    Revisa esto si puedes e intenta obtener eso de otra forma.

     

    Como consejo yo no lo ejecutaría de esa forma sino que una vez devuelto el valor de la BB.DD sin el Count hagas la agrupación en el cliente a partir de los valores devueltos en "Query";

    Saludos,


    phurtado
    • Editado Pedro Hurtado martes, 27 de septiembre de 2011 17:04
    • Marcado como respuesta paulcc84 miércoles, 28 de septiembre de 2011 13:10
    martes, 27 de septiembre de 2011 17:03
  • Saludos,

    Muchas gracias si me funciono!!!

     


    Pura Vida
    miércoles, 28 de septiembre de 2011 13:11