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));
        }
示例#2
0
        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());
        }