0

我有一个从表中检索记录的代码:

var query = (from c in DBContext.MyTable where c.FacilityID == ID select c);

然后我想列出所有记录,我使用下面的代码:

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);
}

我不知道怎么打电话GetPages

我的代码是错误的。

IEnumerable<object> list = GetPages(query, 1000);
foreach (var result in list)
{
    string filePath = result.FilePath;
    string fileName = result.FileName;
    // log to output
}

更新: 当我悬停查询的 var 部分时。

  System.Linq.IOrderedQueryable<Something.Web.SharedObjects.MyTable>

我将 T 替换为 Something.Web.SharedObjects.MyTable。它似乎正在工作。

4

1 回答 1

2

好吧,假设您query是一个IQueryable<FileResult>,请查看该方法声明返回的内容。你想要这样的东西:

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!");
}

重要的是您要了解返回的是一个页面序列,其中每个页面都是一个项目序列。

于 2013-02-01T14:25:37.563 回答