public GridResponseModel <SaleViewModel> GetGridData(GridRequestModel request, DateTime startDate, DateTime endDate) { GridResponseModel <SaleViewModel> gridData = new GridResponseModel <SaleViewModel>(); endDate = endDate.AddDays(1); gridData.Count = _repository.GetAllActive(getCreatedCompanyId()) .Where(x => x.Created >= startDate && x.Created <= endDate).Count(); var query = _repository.GetAllActive(getCreatedCompanyId()) .Where(x => x.Created >= startDate && x.Created <= endDate) .Include(x => x.SalesDetails) .Include(x => x.SalesDetails.Select(y => y.Product)) .Include(x => x.SalesDetails.Select(y => y.Product.Group)) .Include(x => x.SalesDetails.Select(y => y.Product.Brand)) .Include(x => x.Customer); if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(x => x.InvoiceNo.Contains(request.Keyword)); } if (request.IsAscending) { switch (request.OrderBy) { case "Name": query = query.OrderBy(l => l.InvoiceNo); break; default: query = query.OrderBy(l => l.Created); break; } } else { switch (request.OrderBy) { case "Name": query = query.OrderByDescending(l => l.InvoiceNo); break; default: query = query.OrderByDescending(l => l.Created); break; } } query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount); List <Sale> sales = query.ToList(); foreach (var sale in sales) { gridData.Data.Add(new SaleViewModel(sale)); } return(gridData); }