public async Task <IActionResult> GetClassByFilter(ClassSearchFilter filter)
        {
            var classes = await _classService.GetListByFilter(filter);

            var model = new ClassListViewModel
            {
                Classes      = classes,
                SearchFilter = filter
            };

            return(Ok(new
            {
                model = model
            }));
        }
        public Task <IEnumerable <Class> > GetListByFilter(ClassSearchFilter filter)
        {
            List <Class> classList = new List <Class>();

            var query = db.Class
                        .Where(f =>
                               (f.Status != StatusConstants.Deleted) &&
                               (filter.Status == null || filter.Status == string.Empty || f.Status == Convert.ToInt32(filter.Status)) &&
                               (filter.SearchTerm == string.Empty || f.Name.Contains(filter.SearchTerm.Trim())));

            filter.TotalCount = query.Count();

            //sorting
            Func <Class, object> OrderByStringField = null;

            switch (filter.SortColumn)
            {
            case "Name":
                OrderByStringField = p => p.Name;
                break;

            case "Capacity":
                OrderByStringField = p => p.Capacity;
                break;

            default:
                OrderByStringField = p => p.Name;
                break;
            }
            //end sorting

            var finalQuery = filter.SortDirection == "ASC" ? query.OrderBy(OrderByStringField) : query.OrderByDescending(OrderByStringField);

            classList = finalQuery.Skip((filter.PageNumber - 1) * filter.PageSize)
                        .Take(filter.PageSize)
                        .AsParallel()
                        .ToList();
            return(Task.Run(() => classList.AsEnumerable()));
        }