public ExplodedFoodRecordSummary ExplodeFoodRecords(IEnumerable <FoodRecordEffectsSummary> foodRecordEffectsSummaries)
        {
            var expFoodRecSum = new ExplodedFoodRecordSummary();

            foreach (var foodRecordEffectsSummary in foodRecordEffectsSummaries)
            {
                var mealName = foodRecordEffectsSummary.FoodRecord.Name.ToLower();
                if (!String.IsNullOrWhiteSpace(mealName))
                {
                    if (!expFoodRecSum.MealBrandEffectSummaries.ContainsKey(mealName))
                    {
                        expFoodRecSum.MealBrandEffectSummaries[mealName] = new Dictionary <string, IList <EffectsSummary> >();
                    }

                    var brand = "";
                    if (!String.IsNullOrWhiteSpace(foodRecordEffectsSummary.FoodRecord.Brand))
                    {
                        brand = foodRecordEffectsSummary.FoodRecord.Brand.ToLower();
                    }

                    if (!expFoodRecSum.MealBrandEffectSummaries[mealName].ContainsKey(brand))
                    {
                        expFoodRecSum.MealBrandEffectSummaries[mealName][brand] = new List <EffectsSummary>();
                    }

                    expFoodRecSum.MealBrandEffectSummaries[mealName][brand].Add(foodRecordEffectsSummary.RelatedEffectsSummary);
                }

                var ingredients = foodRecordEffectsSummary.FoodRecord.Ingredients;
                if (ingredients != null && ingredients.Any())
                {
                    foreach (var ing in ingredients)
                    {
                        var ingName = ing.Name.ToLower();
                        if (!String.IsNullOrWhiteSpace(ing.Name))
                        {
                            if (!expFoodRecSum.IngredientEffectSummaries.ContainsKey(ingName))
                            {
                                expFoodRecSum.IngredientEffectSummaries[ingName] = new Dictionary <string, IList <EffectsSummary> >();
                            }

                            if (!expFoodRecSum.IngredientEffectSummaries[ingName].ContainsKey(ing.ProcessingType))
                            {
                                expFoodRecSum.IngredientEffectSummaries[ingName][ing.ProcessingType] = new List <EffectsSummary>();
                            }

                            expFoodRecSum.IngredientEffectSummaries[ingName][ing.ProcessingType].Add(foodRecordEffectsSummary.RelatedEffectsSummary);
                        }
                    }
                }
            }
            return(expFoodRecSum);
        }
        public AggregatedFoodRecordSummary AggregateExplodedRecords(ExplodedFoodRecordSummary explodedRecords)
        {
            var aggregatedExplodedRecords = new AggregatedFoodRecordSummary();

            foreach (var key in explodedRecords.MealBrandEffectSummaries.Keys)
            {
                if (explodedRecords.MealBrandEffectSummaries[key] != null)
                {
                    foreach (var brandKey in explodedRecords.MealBrandEffectSummaries[key].Keys)
                    {
                        if (explodedRecords.MealBrandEffectSummaries[key][brandKey] != null)
                        {
                            if (!aggregatedExplodedRecords.MealBrandEffectSummaries.ContainsKey(key))
                            {
                                aggregatedExplodedRecords.MealBrandEffectSummaries[key] = new Dictionary <string, AverageEffectsSummary>();
                            }
                            aggregatedExplodedRecords.MealBrandEffectSummaries[key][brandKey] = GenerateAverageEffectsSummary(explodedRecords.MealBrandEffectSummaries[key][brandKey]);
                        }
                    }
                }
            }

            foreach (var key in explodedRecords.IngredientEffectSummaries.Keys)
            {
                if (explodedRecords.IngredientEffectSummaries[key] != null)
                {
                    foreach (var proKey in explodedRecords.IngredientEffectSummaries[key].Keys)
                    {
                        if (explodedRecords.IngredientEffectSummaries[key][proKey] != null)
                        {
                            if (!aggregatedExplodedRecords.IngredientEffectSummaries.ContainsKey(key))
                            {
                                aggregatedExplodedRecords.IngredientEffectSummaries[key] = new Dictionary <string, AverageEffectsSummary>();
                            }
                            aggregatedExplodedRecords.IngredientEffectSummaries[key][proKey] = GenerateAverageEffectsSummary(explodedRecords.IngredientEffectSummaries[key][proKey]);
                        }
                    }
                }
            }

            return(aggregatedExplodedRecords);
        }