sélectionner le top 5 dans le cadre de l'entité

c# entity-framework

Question

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 sélectionner la 5 plus grande personne qui compte le plus grand nombre de comptes?

Réponse acceptée

Essaye ça:

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

Ceci retourne IQueryable<Person> . Il ne renvoie pas encore les résultats, car il implémente l'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 ce SQL exact. Différentes versions d'EF peuvent produire différents SQL, 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 le pouvoir d'Entity Framework. Il traduit les expressions .NET en SQL.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow