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();
        }
示例#2
0
 public NorthwindQuery(INorthwindRepository repo)
 {
     Field <ListGraphType <CustomerType> >(
         name: "customers",
         description: "Customers that have made orders in the past at some point.",
         arguments: new QueryArguments(new QueryArgument <IdGraphType> {
         Name = "customerId"
     }),
         resolve: _ => repo.GetCustomers()
         );
 }
示例#3
0
        public override async Task <CustomerResponse> GetAllCustomers(Empty request, ServerCallContext context)
        {
            var response  = new CustomerResponse();
            var customers = await _repo.GetCustomers();

            response.Customers.AddRange(customers.Select(c =>
                                                         new CustomerMessage
            {
                CustomerId  = c.CustomerId,
                CompanyName = c.CompanyName,
                ContactName = c.ContactName
            }));
            return(response);
        }
        /// <summary>
        /// Return list of customers, page size, page number and an option to specify orders should be included
        /// </summary>
        /// <param name="pageSize">numer of items per page</param>
        /// <param name="pageNo">page number</param>
        /// <param name="includeOrders">flag to indicate customers orders should also be returned along with customer entity</param>
        /// <returns></returns>
        public IHttpActionResult GetCustomers([FromUri] int pageSize = 10, [FromUri] int pageNo = 1, [FromUri] bool includeOrders = false)
        {
            var    entities       = _repository.GetCustomers();
            var    totalCustomers = entities.Count();
            var    totalPages     = Math.Ceiling((decimal)(totalCustomers / pageSize));
            var    skipCount      = pageSize * (pageNo - 1);
            var    canPage        = skipCount < totalCustomers;
            String nextPageLink   = null;
            String prevPageLink   = null;
            IEnumerable <CustomerModel> customers = null;

            if (canPage)
            {
                var subset = from c in entities
                             .OrderBy(c => c.CustomerID)
                             .Skip(skipCount)
                             .Take(pageSize)
                             select c;
                customers = ModelFactory.GetCustomers(subset);
                if (pageNo > 1)
                {
                    prevPageLink = GetLink(pageSize, pageNo - 1, includeOrders);
                }
                if ((totalCustomers - skipCount) > pageSize)
                {
                    //not at the end of page
                    var nextPageNo = pageNo + 1;
                    nextPageLink = GetLink(pageSize, nextPageNo, includeOrders);
                }
            }

            return(Ok(
                       new
            {
                TotalCustomers = totalCustomers,
                PageSize = pageSize,
                PageNo = pageNo,
                Results = customers,
                NextPageLink = nextPageLink,
                PreviousPageLink = prevPageLink
            }));
        }
        public async Task <IEnumerable <OrderObject> > GetOrdersInfo(int orderId)
        {
            var order = (await northwindRepository.GetOrders()).First(a => a.OrderID == orderId);

            var customer = (await northwindRepository.GetCustomers()).First(a => a.CustomerID == order.CustomerID);

            var employee = (await northwindRepository.GetEmployees()).First(a => a.EmployeeID == order.EmployeeID);

            order.Customer = customer;
            order.Employee = employee;

            var orderObject = new ObservableCollection <OrderObject>();

            orderObject.Add(new OrderObject()
            {
                OrderId      = order.OrderID,
                OrderDate    = order.OrderDate.Value,
                EmployeeName = order.Employee.FirstName + " " + order.Employee.LastName,
                CustomerName = order.Customer.CompanyName
            });

            return(orderObject);
        }
示例#6
0
 public IActionResult GetCustomers()
 {
     return(Ok(_nortwindRepo.GetCustomers()));
 }
 public async Task <List <Customer> > GetCustomers()
 {
     return(await _repo.GetCustomers());
 }