private async void FillCollections() { var orderDetails = await northwindRepository.GetOrderDetails(); var customers = await northwindRepository.GetCustomers(); var products = await northwindRepository.GetProducts(); var orders = await northwindRepository.GetOrders(); var categories = await northwindRepository.GetCategories(); var employees = await northwindRepository.GetEmployees(); customersList.AddRange(customers); productsList.AddRange(products); ordersList.AddRange(orders); orderDetailsList.AddRange(orderDetails); //Filling navigation propertie(Category) of Products await Task.Run(() => { products.ForEach(product => { product.Category = categories.First(category => category.CategoryID == product.CategoryID); }); }); //Filling naviagtion properties(Customer and Employee) of Order await Task.Run(() => { orders.ForEach(order => { order.Customer = customers.First(customer => customer.CustomerID == order.CustomerID); order.Employee = employees.First(employee => employee.EmployeeID == order.EmployeeID); }); }); //Filling naviagtion properties(Order and Product) of Order details await Task.Run(() => { orderDetails.ForEach(orderDetail => { orderDetail.Order = orders.First(order => order.OrderID == orderDetail.OrderID); orderDetail.Product = products.First(product => product.ProductID == orderDetail.ProductID); }); }); //Starting from this moment we track changes in source lists (i.e. customersList, productsList, ordersList, orderDetailsList) customersByCountries.Subscribe(); purchasesByCustomers.Subscribe(); salesByEmployees.Subscribe(); productsByCategories.Subscribe(); ordersByCountries.Subscribe(); salesByCountries.Subscribe(); salesByCategories.Subscribe(); }