Путаница в использовании общего метода подкачки в Linq to SQL - PullRequest
0 голосов
/ 06 июня 2011

Если я бегу

ctx.CompanyDirectors.OrderBy(c => c.Id).Skip(pageNumber*pageSize).Take(pageSize).ToList();

Пейджинг происходит на SQL Server (теперь классический row_number() OVER), и это, как я и ожидал.

Однако я добавил небольшой метод расширения ярлыка ниже:

public static IEnumerable<T> Page<T>(this IEnumerable<T> enumerable, int pageNumber, int pageSize)
    {
      return enumerable
        .Skip(pageNumber*pageSize)
        .Take(pageSize);
    }

И когда я это сделаю

ctx.CompanyDirectors.OrderBy(c => c.Id).Page(pageNumber, pageSize).ToList();

Теперь подкачка происходит в клиентском коде, т. Е. Все результаты возвращаются, и подкачка происходит в памяти, что бесполезно.

Я ошеломлен, но явно упускаю что-то явно очевидное ...

1 Ответ

2 голосов
/ 06 июня 2011

Я думаю, вам нужен метод расширения для IQueryable<T>.

...