代码之家  ›  专栏  ›  技术社区  ›  Sedat Kapanoglu johnnywhoop

为什么LINQ to SQL分页在函数内部失败?

  •  2
  • Sedat Kapanoglu johnnywhoop  · 技术社区  · 16 年前

    这里我有一个武断的 IEnumerable<T> . 我想用一个通用的助手函数来分页,而不是写 Skip / Take 每次配对。我的职能是:

    IEnumerable<T> GetPagedResults<T>(IEnumerable<T> query, int pageIndex, int pageSize)
    {
       return query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
    }
    

    我的代码是:

    result = GetPagedResults(query, 1, 10).ToList();
    

    这将生成一个不带 TOP 10 关键字。但下面的代码生成了带有它的select:

    result = query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
    

    我在函数中做了什么错误?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Mike Mooney    16 年前

    我相信您需要将其更改为使用iQueryable,以维护延迟的执行。当使用IEnumerable时,它将在执行基本查询后在内存中应用额外的函数(skip、take等)。但是,使用iQueryable将导致在发送到数据库的查询中包含其他方法。

        2
  •  2
  •   Matthew Whited    16 年前

    尝试使用iqueryable…

    IQueryable<T> GetPagedResults<T>(IQueryable<T> query, 
                                     int pageIndex, 
                                     int pageSize)
    {
        return query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
    }