public JsonResult GetFilteredContacts([ModelBinder(typeof(DataTablesBinder))] IDataTablesRequest dataTablesRequestModel) { int filteredCount; int totalCount; var sortedColumns = dataTablesRequestModel.Columns.GetSortedColumns(); var sortingConfig = DataTablesHelper.GetSortingConfig(sortedColumns); var searchConfig = DataTablesHelper.GetSearchingConfig(dataTablesRequestModel.Search.Value, dataTablesRequestModel.Columns); var filterConfig = new DataTablesFilteringModel { SearchConfig = searchConfig, SortingConfig = sortingConfig, StartIndex = dataTablesRequestModel.Start, ItemAmount = dataTablesRequestModel.Length, }; var filteredResults = _unitOfWork.PersonRepository.GetFilteredList(filterConfig, out filteredCount, out totalCount); var data = filteredResults.Select(contact => new ContactListItemViewModel { Id = contact.Id, Name = contact.Name, Surname = contact.Surname, Emails = contact.Emails .Select(email => new EmailViewModel { Id = email.Id, Name = email.Name, PersonId = email.PersonId }), Addresses = contact.Addresses .Select(address => new AddressViewModel { Id = address.Id, Name = address.Name, PersonId = address.PersonId }) }); return(Json(new DataTablesResponse ( dataTablesRequestModel.Draw, data, filteredCount, totalCount ), JsonRequestBehavior.AllowGet)); }
public IEnumerable <Person> GetFilteredList(DataTablesFilteringModel filter, out int filteredCount, out int totalCount) { var contactsQuery = _dbContext.People .Include(x => x.Emails) .Include(x => x.Addresses) .AsQueryable(); totalCount = contactsQuery.Count(); filteredCount = 0; //Filter by global search value contactsQuery = FilterBySearchCriteria(contactsQuery, filter.SearchConfig); filteredCount = contactsQuery.Count(); contactsQuery = contactsQuery.OrderBy(filter.SortingConfig == String.Empty ? "surname asc" : filter.SortingConfig); //Paginate contactsQuery = contactsQuery.Skip(filter.StartIndex) .Take(filter.ItemAmount); return(contactsQuery.ToList()); }