J'ai quelques problèmes avec une requête lente dans Entity Framework en C#. J'ai créé une méthode d'extension appelée Page pour gérer la pagination, mais lorsque je l'utilise, la requête devient vraiment lente. Si je fais simplement .Skip(page.Value * pageSize.Value).Take(pageSize.Value) au lieu d'utiliser Page, la requête est beaucoup plus rapide. Je suppose que l'utilisation de Page permet de récupérer tous les contacts avant la pagination. Existe-t-il un moyen d'éviter cela ou est-ce que je fais quelque chose d'incorrect ?
Requête :
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();
Méthode d'extension :
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;
}