private ProductIngredientSummaryModel summaryIngredientOfProductByPeriod(int productId, DateTime startDate, DateTime endDate) { var product = db.Product.FirstOrDefault(x => x.productID == productId); if (product != null) { var recipes = db.Recipe.Where(x => x.productID == product.productID); int orderSummary = db.Order.Where(x => x.orderDate.Value >= startDate && x.orderDate <= endDate) .SelectMany(x => x.OderDetail).Where(x => x.productID == product.productID) .Sum(x => x.productQuantity); ProductIngredientSummaryModel results = new ProductIngredientSummaryModel(); results.product = product; foreach (Recipe r in recipes) { IngredientSummaryDetail detail = new IngredientSummaryDetail(); detail.ingredient = r.Ingredient; detail.amount = (float)(r.ingredQuantity.Value * orderSummary); results.ingredientDetails.Add(detail); } return(results); } return(null); }
private IngredientSummaryModel summaryIngredientByPeriodAndMember(int memberId, DateTime startDate, DateTime endDate) { var products = db.Order.Where(x => x.orderDate >= startDate && x.orderDate <= endDate).SelectMany(x => x.OderDetail).Select(x => x.Product); IngredientSummaryModel result = new IngredientSummaryModel(); foreach (Product product in products) { ProductIngredientSummaryModel models = summaryIngredientOfProductByPeriodAndMember(memberId, product.productID, startDate, endDate); foreach (var detail in models.ingredientDetails) { if (result.ingredientDetails.Any(x => x.ingredient.IngreID == detail.ingredient.IngreID)) { result.ingredientDetails.FirstOrDefault(x => x.ingredient.IngreID == detail.ingredient.IngreID).amount += detail.amount; } else { result.ingredientDetails.Add(detail); } } } return(result); }