Przywoływanie ramek encji przy użyciu metody rozszerzenia jest powolne?

Mam problemy z powolnym zapytaniem w Entity Framework w C #. Stworzyłem metodę rozszerzenia o nazwie Strona do obsługi stronicowania, ale kiedy z niej korzystam, zapytanie staje się naprawdę wolne. Jeśli po prostu zrobię .Skip (page.Value * pageSize.Value) .Take (pageSize.Value) zamiast używać strony zapytanie staje się dużo szybsze. Myślę, że robienie tego za pomocą strony pobiera wszystkie kontakty przed stronicowaniem. Czy istnieje sposób, aby temu zapobiec lub czy robię coś innego źle?

Pytanie:

var contacts = db.Contacts
                        .Where(x => x.AccountID == accountID && x.Deleted == false)
                        .OrderByDescending(x => x.FirstName)
                        .ThenBy(x => x.LastName)
                        .ThenBy(x => x.CreatedDate)
                        .Page(page, pageSize);

return contacts.ToList();

Metoda rozszerzenia:

    public static IEnumerable<T> Page<T>(this IEnumerable<T> elements, int? page, int? pageSize)
    {
        if (page.HasValue && pageSize.HasValue)
            return elements.Skip(page.Value * pageSize.Value).Take(pageSize.Value);
        else
            return elements;
    }

questionAnswers(1)

yourAnswerToTheQuestion