public static IList <Category> GetCategories(int startIndex, int pageSize, ReadOnlyCollection <SortedColumn> sortedColumns, out int totalRecordCount, out int searchRecordCount, string searchString) { var categories = GetAllCategories(); totalRecordCount = categories.Count; if (!string.IsNullOrWhiteSpace(searchString)) { categories = categories.Where(c => c.Name.ToLower().Contains(searchString.ToLower())).ToList(); } searchRecordCount = categories.Count; IOrderedEnumerable <Category> sortedCategories = null; foreach (var sortedColumn in sortedColumns) { switch (sortedColumn.PropertyName) { case "Name": sortedCategories = sortedCategories == null?categories.CustomSort(sortedColumn.Direction, cust => cust.Name) : sortedCategories.CustomSort(sortedColumn.Direction, cust => cust.Name); break; } } return(sortedCategories.Skip(startIndex).Take(pageSize).ToList()); }