コード例 #1
0
        /// <summary>
        /// Query sample N X N and grouping
        /// </summary>
        public async Task <SumarizedPurchaseOrder> GetSumarizedPurchaseOrderFromDate(DateTime date)
        {
            // Para a tabela de PurchaseOrderProducts
            // Incluo a referência da tabela product e purchaseOrder
            // Filtrando para data passada por parâmetro
            // Agrupo pelo Id do produto e sua descrição
            var purchaseOrderProductUnits = await QueryAsync <SumarizedProduct>(@"
                SELECT product.Id AS Id, 
                       product.Description AS Description, 
                       SUM(purchaseOrderProduct.Quantity) AS Quantity, 
                       SUM(purchaseOrderProduct.Quantity * purchaseOrderProduct.UnitValue) AS TotalValue
                FROM PurchaseOrderProducts purchaseOrderProduct
                    INNER JOIN Products product ON product.Id = purchaseOrderProduct.ProductId
                    INNER JOIN PurchaseOrders purchaseOrder ON purchaseOrder.Id = purchaseOrderProduct.PurchaseOrderId
                WHERE purchaseOrder.Date = @Date
                GROUP BY product.Id, product.Description",
                                                                                new { Date = date.Date });

            var sumarized = new SumarizedPurchaseOrder()
            {
                Date          = date,
                TotalQuantity = purchaseOrderProductUnits.Sum(s => s.Quantity),
                TotalValue    = purchaseOrderProductUnits.Sum(s => s.TotalValue),
                Products      = purchaseOrderProductUnits
            };

            return(sumarized);
        }
コード例 #2
0
        /// <summary>
        /// Query sample N X N and grouping
        /// </summary>
        public async Task <SumarizedPurchaseOrder> GetSumarizedPurchaseOrderFromDate(DateTime date)
        {
            if (date == DateTime.MinValue)
            {
                date = DateTime.UtcNow;
            }

            // Para a tabela de ProductOrder
            // Incluo a referência da tabela product e order
            // Filtrando para data passada por parâmetro
            var baseQuery = Context.PurchaseOrderProducts
                            .Include(i => i.Product)
                            .Include(i => i.Order)
                            .Where(w => w.Order.Date == date)
                            .Select(productOrder => productOrder);

            // Agrupo pelo Id do produto e sua descrição
            var sumarizedByProduct = (from productOrders in (from po in baseQuery
                                                             select new
            {
                ProductId = po.Product.Id,
                po.Product.Description,
                po.Quantity,
                Total = po.Quantity * po.UnitValue
            }).ToList()
                                      group productOrders by new { productOrders.ProductId, productOrders.Description } into productGroup
                                      select new
            {
                productGroup.Key.ProductId,
                ProductDescription = productGroup.Key.Description,
                Amount = productGroup.Sum(s => s.Quantity),
                TotalValue = productGroup.Sum(s => s.Total)
            });

            var sumarized = new SumarizedPurchaseOrder()
            {
                Date          = date,
                TotalQuantity = await baseQuery.SumAsync(s => s.Quantity),
                TotalValue    = sumarizedByProduct.Sum(s => s.TotalValue),
                Products      = sumarizedByProduct.Select(s => new SumarizedProduct()
                {
                    Id          = s.ProductId,
                    Description = s.ProductDescription,
                    Amount      = s.Amount,
                    TotalValue  = s.TotalValue
                })
            };

            return(sumarized);
        }