Reputation:
I have a code to retrieve the records from a table:
var query = (from c in DBContext.MyTable where c.FacilityID == ID select c);
Then I want to list all records, I use the code below:
public IEnumerable<IEnumerable<T>> GetPages<T>(IQueryable<T> query, int pageSize)
{
int pageNumber = 10;
var page = GetPage(query, pageSize, pageNumber).ToList();
while (page.Any())
{
yield return page;
page = GetPage(query, pageSize, pageNumber).ToList();
}
}
public IQueryable<T> GetPage<T>(IQueryable<T> query, int pageSize, int pageNumer)
{
return query.Skip(pageNumer * pageSize)
.Take(pageSize);
}
I am not sure how to call GetPages
?
My code is wrong.
IEnumerable<object> list = GetPages(query, 1000);
foreach (var result in list)
{
string filePath = result.FilePath;
string fileName = result.FileName;
// log to output
}
UPDATE: When I hover var part of query.
System.Linq.IOrderedQueryable<Something.Web.SharedObjects.MyTable>
I replace T with Something.Web.SharedObjects.MyTable. It seems to be working.
Upvotes: 0
Views: 216
Reputation: 1500385
Well assuming your query
is an IQueryable<FileResult>
, look at what the method is declared to return. You want something like:
IEnumerable<IEnumerable<FileResult>> pages = GetPages(query, 1000);
foreach (IEnumerable<FileResult> page in pages)
{
Console.WriteLine("Start of page!");
foreach (var result in page)
{
Console.WriteLine("{0} - {1}", result.FilePath, result.FileName);
}
Console.WriteLine("End of page!");
}
It's important that you understand that what's returned is a sequence of pages, where each page is a sequence of items.
Upvotes: 2