none
Como recupero la columna de un conjunto de resultados con DataReader (ADO .NET) RRS feed

  • Pregunta

  • Buenas comunidad seré objetivo.

    Esta es la consulta:

    USE northwind
    GO
    
    SELECT T0.ProductID, T1.ProductName, T0.Quantity, T0.UnitPrice, T0.Quantity * T0.UnitPrice As Total  
    FROM [Order Details] T0 INNER JOIN Products T1 ON T0.ProductID = T1.ProductID
    WHERE T0.OrderID = 11075

    Y estas son las clases (Entidades) que usaría para guardar la data respectiva:

    public class EntOrderDetails
        {
            public EntOrders Orders { get; set; }
            public EntProducts Products { get; set; }
            public double UnitPrice { get; set; }
            public Int16 Quantity { get; set; }
            public double Discount{ get; set; }
    
            public EntOrderDetails()
            {
                Orders = new EntOrders();
                Products = new EntProducts();
            }
        }
    public class EntProducts
        {
            public int ProductID { get; set; }
            public string ProductName { get; set; }
            public int SupplierID { get; set; }
            public int CategoryID { get; set; }
            public string QuantityPerUnit { get; set; }
            public double UnitPrice { get; set; }
            public Int16 UnitsInStock { get; set; }
            public Int16 UnitsOnOrder { get; set; }
            public Int16 ReorderLevel { get; set; }
            public bool Discontinued { get; set; }
        }
    (Omitan detalles de la tabla Products)

    Como pueden ver,

    T0.Quantity * T0.UnitPrice As Total

    me devuelve una columna resultado de otras dos, esta columna Total no es parte de los atributos de ninguna de mis clases entidad definidas en mi aplicación, cual sería la mejor práctica para guardar el resultado de dicha columna?

    He pensado en reutilizar un columna que no interviene en la consulta como podría ser

     public double UnitPrice { get; set; }

    de mi tabla Products, pero no sé si es lo adecuado.
    *Esta sería la manera que mencionaba.

    public List<EntOrderDetails> DetallePedido(int orderID)
            {
                List<EntOrderDetails> lstOrderDetail = new List<EntOrderDetails>();
                try
                {
                    cn.Open();
                    cmd = new SqlCommand("SP_DetalleOrden", cn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@OrderID", SqlDbType.Int, 4).Value = orderID;
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        EntOrderDetails orderDetail = new EntOrderDetails();
                        orderDetail.Products.ProductID = Convert.ToInt32(dr["ProductID"].ToString());
                        orderDetail.Products.ProductName = dr["ProductName"].ToString();
                        orderDetail.Quantity = Convert.ToInt16(dr["Quantity"].ToString());
                        orderDetail.UnitPrice = Convert.ToDouble(dr["UnitPrice"].ToString());
                        orderDetail.Products.UnitPrice = Convert.ToDouble(dr["Total"].ToString());
                        lstOrderDetail.Add(orderDetail);
                    }
                }
                catch (Exception)
                {
                    
                    throw;
                }
                return lstOrderDetail;
            }
    Gracias por el tiempo.






    lunes, 31 de julio de 2017 20:06

Respuestas

  • Agrega una propiedad de sólo lectura, en la entidad 'EntOrderDetails', que devuelva el resultado de multiplicar el valor de las propiedades 'Quantity' y 'UnitPrice'.

    public double UnitPrice { get; set; }
    public Int16 Quantity { get; set; }
    public double Discount { get; set; }
    public double Total { get { return UnitPrice * Quantity; } }



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Propuesto como respuesta Moderador M miércoles, 2 de agosto de 2017 18:34
    • Marcado como respuesta Moderador M viernes, 4 de agosto de 2017 16:55
    lunes, 31 de julio de 2017 20:54