sélectionnez top 5 dans l’entité framework

j’ai

[Person] PersonID, EmailAddress, FirstName, LastName [OnlineAccount] OnlineAccountID, PersonID, Nickname 

Chaque personne est autorisée à avoir 0- * OnlineAccount.

Dans la structure d’entité avec C #, comment puis-je sélectionner les 5 personnes ayant le plus grand nombre de comptes?

Essaye ça:

 var items = context.PersonSet.OrderByDescending(u => u.OnlineAccounts.Count).Take(5); 

Cela retourne IQueryable . Il ne renvoie pas encore de résultat, car il implémente une exécution différée. Il sera traduit en SQL et exécuté en cas de besoin:

 var metarializedItems = items.ToList(); // ToList forces execution 

ou

 foreach(var item in items) // foreach forces execution 

L’exemple ci-dessus traduira en SQL similaire à celui-ci:

 SELECT TOP 5 p.PersonID, p.EmailAddress, p.FirstName, p.LastName FROM Person p ORDER BY (SELECT COUNT(*) FROM OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC 

Ce ne sera pas exactement ce SQL. Différentes versions d’EF peuvent produire des SQL différents, mais je l’ai écrit pour illustrer son fonctionnement. Take(5) est traduit en TOP 5 . OrderByDescending(u => u.OnlineAccounts.Count) est traduit en ORDER BY (SELECT COUNT(*) FROM OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC . C’est la puissance d’Entity Framework. Il traduit les expressions .NET en SQL.