public IHttpActionResult Post(ContactsSearchRequest request)
        {
            var contactsList = Business.Contacts.GetAllContacts();
            var jsonContacts = JsonConvert.SerializeObject(contactsList);
            var responseData = JsonConvert.DeserializeObject <ContactsData>(jsonContacts);

            var response = Search(responseData.Data, request);

            return(Ok(response));
        }
        private static ContactsSearchResponse Search(ICollection <Contact> contacts, ContactsSearchRequest request)
        {
            var results  = FilterContacts(contacts, request.Search.Value).ToList();
            var response = new ContactsSearchResponse
            {
                Data            = PageResults(results, request),
                Draw            = request.Draw,
                RecordsFiltered = results.Count,
                RecordsTotal    = contacts.Count
            };

            return(response);
        }
        private static IEnumerable <Contact> OrderResults <Contact>(IEnumerable <Contact> results, ContactsSearchRequest request)
        {
            if (request.Order == null)
            {
                return(results);
            }
            var columnIndex   = request.Order[0].Column;
            var sortDirection = request.Order[0].Dir;
            var columnName    = request.Columns[columnIndex].Data;
            var prop          = typeof(Contact).GetProperty(columnName);

            return(sortDirection == "asc" ? results.OrderBy(x => prop.GetValue(x, null)) : results.OrderByDescending(x => prop.GetValue(x, null)));
        }
        protected static IList <Contact> PageResults <Contact>(IEnumerable <Contact> results, ContactsSearchRequest request)
        {
            var skip           = request.Start;
            var pageSize       = request.Length;
            var orderedResults = OrderResults(results, request);

            return(pageSize > 0 ? orderedResults.Skip(skip).Take(pageSize).ToList() :
                   orderedResults.ToList());
        }