public async Task LoadAsync() { try { var weightRecords = await App.Database.GetWeightRecordsAsync(); var count = weightRecords.Count; if (count > 1) { weightRecords = weightRecords.OrderBy(wr => wr.MeasuredAt).ToList(); var itemRecords = await App.Database.GetItemRecordsAsync(); var distribution = new WeightChangeDistribution(); for (int i = 0; i < count - 1; i++) { var record1 = weightRecords[i]; var record2 = weightRecords[i + 1]; var weightSpan = new WeightSpan(record1, record2); var spanItemRecords = itemRecords.Where(ir => ir.At > weightSpan.From && ir.At <= weightSpan.To); distribution.Add(DistributionStrategy.Distribute(weightSpan, spanItemRecords.ToList())); } var items = await App.Database.GetItemsAsync(); Items = GetMealItemViewModels(distribution, items); SortItems(); } } catch (Exception exception) { Console.WriteLine(exception); } }
protected virtual ObservableCollection <MealItemViewModel> GetMealItemViewModels( WeightChangeDistribution distribution, List <Item> items) => new ObservableCollection <MealItemViewModel>( distribution.Select(pair => new MealItemViewModel { Id = pair.Key, Name = items.Single(i => i.Id == pair.Key).Name, Count = pair.Value.Count, Average = pair.Value.Average(), Sum = pair.Value.Sum() }) .OrderByDescending(i => i.Sum));
protected override ObservableCollection <MealItemViewModel> GetMealItemViewModels(WeightChangeDistribution distribution, List <Item> items) => new ObservableCollection <MealItemViewModel>( base.GetMealItemViewModels(distribution, items).Where(vm => vm.Sum > 0));