private static PageResults ( |
||
query | ||
data | List |
|
return | List |
private static List<FundraisingMenuResult> PageResults(DataTableParameters query, List<FundraisingMenuResult> data)
{
// Count how many "virtual" records there are before the page begins
int virtualRecordsBeforeStart = data.Take(query.start).Where(r => r.HubId == null).Count();
// That's our starting point.
IEnumerable<FundraisingMenuResult> recordsFromStart = data.Skip(query.start + virtualRecordsBeforeStart);
// Take an initial set of records using the page size.
IEnumerable<FundraisingMenuResult> pagedResult = recordsFromStart.Take(query.length);
// Take more records until we have query.length real records or we hit the end of the list.
int totalLength = recordsFromStart.Count();
int currentCount = pagedResult.Count();
int virtualCount = pagedResult.Where(r => r.HubId == null).Count();
while (currentCount - virtualCount < query.length && currentCount + virtualCount < totalLength)
{
pagedResult = recordsFromStart.Take(currentCount + virtualCount);
currentCount = pagedResult.Count();
virtualCount = pagedResult.Where(r => r.HubId == null).Count();
}
return pagedResult.ToList();
}