public DataTableResult<FundraisingMenuResult> SearchSortAndFilter(DataTableParameters query)
{
DataTableResult<FundraisingMenuResult> result = GetAllFundraisingMenuProjects();
// Add virtual projects for packages containing no projects.
AddVirtualProjects(result.data);
// Expand by package.
result.data = ExpandByPackage(result.data);
result.draw = query.draw;
result.recordsTotal = result.data.Where(r => r.HubId != null).Count();
// Search
result.data = result.data.Where(r => RecordMatch(r, query)).ToList();
result.recordsFiltered = result.data.Where(r => r.HubId != null).Count();
// Order
result.data = OrderProjectRecords(result.data, query);
// Page
result.data = PageResults(query, result.data);
return result;
}