Entity Framework Paging mit Erweiterungsmethode ist langsam?

Ich habe einige Probleme mit einer langsamen Abfrage in Entity Framework in C #. Ich habe eine Erweiterungsmethode namens Page erstellt, um Paging zu verarbeiten, aber wenn ich sie verwende, wird die Abfrage sehr langsam. Wenn ich nur .Skip (page.Value * pageSize.Value) .Take (pageSize.Value) anstelle von Page verwende, wird die Abfrage viel schneller. Ich vermute, dass es mit Page alle Kontakte vor dem Paging abruft. Gibt es eine Möglichkeit, dies zu verhindern, oder tue ich etwas anderes falsch?

Abfrage:

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

Verlängerungsmethode:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage