Existe-t-il une alternative à l'utilisation de .Contains()
pour sélectionner des objets dans Entity Framework qui existent dans une liste spécifiée? Contains()
fonctionne très bien si votre liste est petite, mais une fois que vous commencez à obtenir quelques milliers d'articles, la performance est terrible.Alternative à l'utilisation de IList.Contains (item.Id) dans Entity Framework pour les grandes listes?
return (from item in context.Accounts
where accountIdList.Contains(item.AccountId)
select item).ToList();
J'utilise EF 4.0, Net Framework 4.0 et SQL Server 2005. Je ne suis pas opposé à une solution SQL soit depuis la requête EF ne génère que prend une seconde pour fonctionner sur SQL pour environ 10k articles.
Non, le base de données a quelques millions de comptes et les données que je veux de la base de données comprend quelques jointures qui rend le résultat final encore plus grand – Rachel
@Rachel, avez-vous essayé d'utiliser un profileur pour voir quelles requêtes sont générées. http://efprof.com/ a un parcours gratuit et pourrait aider avec ceci. – Jethro
Oui, j'ai et la requête s'exécute bien. Il faut environ une seconde pour tirer environ 10 000 enregistrements sur quelques millions. La partie que je trouve inacceptable est que EF prend environ 5 minutes pour générer l'instruction SQL en utilisant .Contains() sur une liste d'environ 10k éléments. – Rachel