user1108948
user1108948

Reputation:

Call IEnumerable

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

Answers (1)

Jon Skeet
Jon Skeet

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

Related Questions