none
¿ADO.NET N-TIER cómo obtener COUNT relaciones? RRS feed

  • Pregunta

  • Buenas.

    Tengo implementado un proyecto N-TIER utilizando WebForms c# 4.0

    Tengo una clase:

    CampanyasEntity 
    {
       public int CampanyaId { get; set; }
       public DateTime FechaCreacion { get; set; }
       public string Nombre { get; set; }
       public string Descripcion { get; set; }
    
       ....
    
       public List<PedidosEntity> ListaPedidos { get; set; }
    }

    La cual contiene una relación con pedidos realizados de dicha campaña.

    Estoy tratando de mostrar un GRIDVIEW con el listado de campañas y me gustaría mostrar también el dato del número de pedidos realizados para cada campaña.

    En este caso es mejor crear un atributo en la clase llamado NumeroPedidos y rellenarlo con un Count cada SELECT?

    ¿O es mejor realizar como en este hilo que una vez abrí para una consulta?
    https://social.msdn.microsoft.com/Forums/es-ES/f9584ece-077a-4d59-90e5-e2b8a9a230bd/cmo-obtener-las-relaciones-de-una-entidad-con-adonet-c?forum=netfxwebes#4de5748e-f83e-47c0-a172-5f9be9400476

    Un saludo. Gracias.

    lunes, 17 de octubre de 2016 6:46

Respuestas

  • en ese caso podrias realizar el count si junto a este realizas un LEFT JOIN y GROUP BY

    SELECT C.CampanyaId, C.Nombre, ...., COUNT(*) as NumeroPedidos
    FROM Companies C LEFT JOIN Pedidos P ON C.CampanyaId = P.CampanyaId
    GROUP BY C.CampanyaId, C.Nombre, ....

    entonces podras traerla cmpania y la cantidad proque al unierlo a los pedidos duplicara registros que justamente juntas con el GROUP BY

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 17 de octubre de 2016 11:15

Todas las respuestas

  • hola

    podrias hacer

    CampanyasEntity 
    {
       public int CampanyaId { get; set; }
       public DateTime FechaCreacion { get; set; }
       public string Nombre { get; set; }
       public string Descripcion { get; set; }
    
       public int NumeroPedidos 
       {
    	get{ return this.ListaPedidos.Count; }
       }
    
       public List<PedidosEntity> ListaPedidos { get; set; }
    }

    entonces asignas a un campo esa propiedad calculada que defines en la clase para mostrar la cantidad de pedidos

    no necesitas un count separado si estas cargando la lista de pedidos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 17 de octubre de 2016 11:03
  • En un principio NO estoy haciendo una carga de la relación con pedidos (ListaPedidos), pero me piden que en un gridview donde aparecen todas las campañas aparezca el número de pedidos para cada una de ellas, pero claro hay algunas que tiene muchos registros y al traerme todas las campañas se demora mucho.

    Entonces no sabía si realizar un SELECT campanya.*, COUNT(p.pedido_id)...

    O bien, realizarlo de la manera:

    https://social.msdn.microsoft.com/Forums/es-ES/f9584ece-077a-4d59-90e5-e2b8a9a230bd/cmo-obtener-las-relaciones-de-una-entidad-con-adonet-c?forum=netfxwebes#4de5748e-f83e-47c0-a172-5f9be9400476

    lunes, 17 de octubre de 2016 11:08
  • en ese caso podrias realizar el count si junto a este realizas un LEFT JOIN y GROUP BY

    SELECT C.CampanyaId, C.Nombre, ...., COUNT(*) as NumeroPedidos
    FROM Companies C LEFT JOIN Pedidos P ON C.CampanyaId = P.CampanyaId
    GROUP BY C.CampanyaId, C.Nombre, ....

    entonces podras traerla cmpania y la cantidad proque al unierlo a los pedidos duplicara registros que justamente juntas con el GROUP BY

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 17 de octubre de 2016 11:15